2012-03-02 23 views
26

Necesito compilar diferentes versiones de un cierto proyecto agregando modificadores de compilador. Por lo general, me gustaría hacer esto mediante el uso de add_definitions o algo asíLínea de comandos de CMake para C++ #define

set_property(TARGET mylib PROPERTY COMPILE_DEFINITIONS _MYDEFINE=1) 

en el archivo CMakeLists.txt.

En este proyecto específico, sin embargo, no puedo modificar ninguna fuente, incluido el archivo CMakeLists.txt.

Tenía la esperanza de que algo así

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 en realidad ganado 't.

¿Cuáles son mis opciones aquí? ¿Hay una opción de línea de comando cmake diferente para lograr esto? Siéntase libre de sugerir soluciones que no incluyan la línea de comando, siempre y cuando no sea necesario cambiar el CMakeLists.txt del proyecto.

Respuesta

23

que lograron hacerlo de esta manera ahora:

yo era capaz de convencer a todo el mundo que añadir las siguientes líneas al CMakeLists.txt común:

IF (NOT DEFINED _MYDEFINE) 
    SET(_MYDEFINE <default value>) 
ENDIF() 
ADD_DEFINITIONS(-D_MYDEFINE=${_MYDEFINE}) 

(No, realmente no se llama "MYDEFINE", y < valor predeterminado > es solo un marcador de posición, acabo de reemplazar todo lo que para este ejemplo)

Esto no cambia el comportamiento actual de la compilación sin banderas de compilación adicionales y, por lo tanto, es un cambio válido.

Y le permite hacer

cmake -D_MYDEFINE=<my value> <path to sources> 

donde esta definición cmake se asignará a un precompilador C++ definición cuando cmake crea el archivo de proyecto.

9

Container CMakeLists.txt solución

solución difícil:

Su sólo lectura CMakeList.txt ruta: ${path}/ReadOnlyProject/CMakeLists.txt

Crear un nuevo CMakeList.txt a superior a la única biblioteca de 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 el ReadOnlyProject no establece definiciones de compiladores directamente, podría funcionar.


En Visual Studio 2010:

intenta modificar c:\Users\${username}\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props añadir configuración del compilador personalizados.

se debe añadir lo siguiente:

<Project> 
    ... 
    <ItemDefinitionGroup> 
    <ClCompile> 
     <PreprocessorDefinitions>__MYDEFINE=1;%(PreprocessorDefinitions)</PreprocessorDefinitions> 
    </ClCompile> 
    </ItemDefinitionGroup> 
</Project> 
+0

Hm mi carpeta% APPDATA% \ Microsoft no tiene ninguna carpeta MSBuild (estoy en Windows XP por cierto) –

+0

Bien, estoy usando Visual Studio 2010. Buscaré la configuración de 2008. – Naszta

+0

+1 para la actualización de Microsoft.Cpp.Win32.user.props, necesaria para agregar la directiva prepocesor sin cambiar .vcxproj – watbywbarif

Cuestiones relacionadas