¿Le pide a CMake que use el comstackdor C ++ para los archivos C que provienen de CMake?

Esto es similar a Force CMake para usar el comstackdor C ++ para archivos C con Visual Studio , pero no es lo mismo. No es lo mismo porque su archivo CMake causa el error; y estoy trabajando en casi todas las plataformas modernas, desde BSD y OS X hasta Solaris y Unix.

Traté de evitar verificaciones inútiles realizadas por CMake:

project(cryptopp, CXX) 

Esto es lo que sucede cuando bash generar el archivo MAKE:

 $ cmake . -- Check if the system is big endian -- Searching 16 bit integer -- Check size of unsigned short CMake Error at /usr/share/cmake-2.8/Modules/CheckTypeSize.cmake:82 (try_compile): Unknown extension ".c" for file /home/jeffrey/cryptopp/CMakeFiles/CheckTypeSize/CMAKE_SIZEOF_UNSIGNED_SHORT.c try_compile() works only for enabled languages. Currently these are: CXX See project() command to enable other languages. Call Stack (most recent call first): /usr/share/cmake-2.8/Modules/CheckTypeSize.cmake:167 (__check_type_size_impl) /usr/share/cmake-2.8/Modules/TestBigEndian.cmake:27 (CHECK_TYPE_SIZE) CMakeLists.txt:49 (TEST_BIG_ENDIAN) 

No tenemos ningún archivo C en nuestro proyecto, por lo que debemos estar seguros con project(cryptopp, CXX) (si estoy leyendo cmake --help-command project correctamente).

La pregunta citada habla de archivos de proyecto, pero no de archivos CMake.

¿Cómo le digo a CMake que use el comstackdor C ++ para todos los archivos, incluidos sus propios archivos CMake?


Estoy en Ubuntu 12 LTS, y proporciona:

 $ cmake --version cmake version 2.8.7 

Hay formas de agregar .c como una extensión de archivo válida para el comstackdor CXX . Incluso si se trata de un CMake muy avanzado, es posible que necesite, si está obligado a admitir versiones anteriores de CMake, un “script de sobrescritura de reglas” de todos modos.

Así que he probado con éxito lo siguiente:

CryptoppMakeRulesOverwrite.cmake

 list(APPEND CMAKE_CXX_SOURCE_FILE_EXTENSIONS c) 

CMakeLists.txt

 cmake_minimum_required(VERSION 2.8.7 FATAL_ERROR) set(CMAKE_USER_MAKE_RULES_OVERRIDE "CryptoppMakeRulesOverwrite.cmake") project(cryptopp CXX) include(CheckTypeSize) CHECK_TYPE_SIZE("unsigned short" CMAKE_SIZEOF_UNSIGNED_SHORT) 

Como @Tsyvarev ha comentado check_type_size() admite un parámetro LANGUAGE , pero desafortunadamente no para CMake versión 2.8.7. Pero esta versión anterior ya es compatible con CMAKE_USER_MAKE_RULES_OVERRIDE .

Así que todavía me pregunto si la mejor solución sería ir a una versión más nueva de CMake (obligando a algunos usuarios de versiones anteriores de CMake a actualizar). O escribiendo sus propios fragmentos try_compile() .

Referencias

  • Cómo agregar en un proyecto CMake una extensión de archivo global (* .pde) a GCC que se trata como código C ++
  • Cambiar el valor predeterminado de CMAKE_CXX_FLAGS_DEBUG y sus amigos en CMake