2011-10-07 17 views
8

He trabajado en un proyecto donde estaba usando g ++ para compilar código C en archivos que terminan en .c. La razón es que me dijeron que g ++ tiene mejores mensajes de advertencia.¿Puede CMake usar g ++ para compilar archivos C?

Estoy cambiando el proceso de compilación de este proyecto para utilizar CMake. Encontré que inicialmente CMake quería usar gcc para compilar archivos C. Esto falló debido a cosas como declarar variables en el tiempo de uso. Así que traté de usar g ++ para compilar archivos de C mediante el uso de la configuración de

set(CMAKE_C_COMPILER_INIT g++) 

en el archivo CMakeLists.txt. Sin embargo, esto se traduce en el mensaje de error:

#error "The CMAKE_C_COMPILER is set to a C++ compiler" 

He estado el cambio de nombre a mis archivos .c .CPP para solucionar este problema, ya que parece ser la forma más fácil para mí hacer las cosas funcionan, y tal vez la mejor manera también. Pero me preguntaba si es posible forzar a CMake a usar g ++ para compilar archivos C.

+1

"La razón es que me han dicho que g ++ tiene mejores mensajes de advertencia." - ¿Y podrías confirmar eso? Diría que es muy cuestionable, porque (hasta donde yo sé) ambos son solo controladores que invocan el mismo compilador con diferentes argumentos (lenguaje, rutas incluidas, biblioteca estándar vinculada, etc.) Aparte de eso, g ++ no es un Compilador C así que terminas escribiendo C++ muy pobre. – delnan

+0

Si está escribiendo C, compile con un compilador de C. C y C++ no son lo mismo. – Kusalananda

+0

Usted dijo '_Esto falló debido a cosas como declarar variables en uso time_'; parece que está utilizando GCC en modo C89, en lugar del modo C99. Intente agregar '-std = c99' al compilador de C de alguna manera. –

Respuesta

21

No debe anular el compilador para este fin. Si realmente necesita para compilar sus archivos de C como C++, entonces debería enseñar a cmake que sus archivos pertenecen al lenguaje C++:

set_source_files_properties(filename.c PROPERTIES LANGUAGE CXX) 
+0

parece que lo que quería hacer no es la mejor idea y debería cambiar el nombre de los archivos a .cpp. Pero gracias por una respuesta correcta, es útil saber cómo hacer lo que quiero en caso de que sea realmente necesario. –

+0

¿Alguna idea de por qué aplicar esto a un solo archivo en mi proyecto haría que todos los archivos del proyecto se compilaran como C++? Tengo un montón de archivos .c y quiero que solo uno de los compilados sea C++. – Scorpio

+1

@Scorpio, en realidad quiero ese síntoma, pero de una manera definida ... ¿Por qué CMake no tiene una manera de compilar todos los archivos .c como C++? – kchoi

Cuestiones relacionadas