usar - Línea de comando CMake para C++#define
how to use cmake clion (3)
Me las arreglé para hacerlo de esta manera ahora:
Pude convencer a todos para agregar las siguientes líneas al CMakeLists.txt común:
IF (NOT DEFINED _MYDEFINE)
SET(_MYDEFINE <default value>)
ENDIF()
ADD_DEFINITIONS(-D_MYDEFINE=${_MYDEFINE})
(No, en realidad no se llama "MYDEFINE", y <valor predeterminado> es solo un marcador de posición, simplemente reemplacé todo eso en este ejemplo)
Esto no cambia el comportamiento actual de la compilación sin indicadores adicionales del compilador y, por lo tanto, es un cambio válido.
Y te permite hacer
cmake -D_MYDEFINE=<my value> <path to sources>
donde esta definición de cmake se asignará a una definición de precompilador C ++ cuando cmake cree el archivo de proyecto.
Necesito compilar diferentes versiones de un determinado proyecto agregando switches del compilador. Usualmente lo haría usando add_definitions o algo así como
set_property( TARGET mylib PROPERTY COMPILE_DEFINITIONS _MYDEFINE=1 )
en el archivo CMakeLists.txt.
Sin embargo, en este proyecto específico, no estoy autorizado a modificar ninguna fuente, incluido el archivo CMakeLists.txt .
Esperaba que algo como
cmake -D_MYDEFINE=1 <path to sources>
generaría un archivo de proyecto (Visual Studio 2008 en mi caso, pero no debería importar) que incluye _MYDEFINE = 1 en sus definiciones de preprocesador, pero de hecho no lo hará.
¿Cuáles son mis opciones aquí? ¿Hay una opción de línea de comando cmake diferente para lograr esto? No dude en sugerir soluciones que no incluyan la línea de comandos, siempre que no sea necesario cambiar el CMakeLists.txt del proyecto.
Para pasar una definición de preprocesador C ++ o C sin modificar ningún archivo de origen CMake, use las variables de entorno CFLAGS
para C o CXXFLAGS
para C ++ respectivamente, por ejemplo:
$ export CXXFLAGS="-D_MY_DEFINE=1 -D_MY_OTHER_DEFINE=1"
$ mkdir build
$ cd build
$ cmake ..
CMakeLists.txt
contenedor CMakeLists.txt
Solución difícil:
Su solo lectura CMakeList.txt
ruta: ${path}/ReadOnlyProject/CMakeLists.txt
Cree un nuevo CMakeList.txt
en la parte superior de la biblioteca de solo lectura ( ${path}/CMakeLists.txt
):
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.0)
PROJECT (FAKE_PROJECT)
ADD_DEFINITIONS(-D_MYDEFINE=1)
ADD_SUBDIRECTORY(ReadOnlyProject)
Ahora usa tu nuevo proyecto ( FAKE_PROJECT
) para compilar. Si ReadOnlyProject
no establece las definiciones de los compiladores directamente, podría funcionar.
En Visual Studio 2010:
Intente modificar c:/Users/${username}/AppData/Local/Microsoft/MSBuild/v4.0/Microsoft.Cpp.Win32.user.props
para agregar configuraciones de compilador personalizadas.
Usted debe agregar lo siguiente:
<Project>
...
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>__MYDEFINE=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
</Project>