win usar txt online how descarga compile como cmakelists c++ command-line cmake

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>