2012-04-10 7 views
10

Parece que necesitamos crear una carpeta separada para cada tipo de compilación (depuración/publicación), ejecutar cmake en cada uno y generar un archivo MAKE separado para la configuración de depuración/liberación. ¿Es posible crear un solo archivo MAKE utilizando cmake que admita la configuración de depuración/liberación al mismo tiempo y cuando realmente ejecutemos "make" que creará carpetas separadas para los productos intermedios y finales (como dlls, exe).Can Cmake genera un único archivo MAKE que admite depuración y publicación

Respuesta

8

Hasta donde yo sé, esto no se puede lograr usando un solo conjunto de scripts de compilación. Sin embargo, lo que puede hacer es tener dos subdirectorios de su área de trabajo:

build/ 
build/debug 
build/release 

Luego hacer:

$ cd build 
$ 
$ cd build/debug 
$ cmake -DCMAKE_BUILD_TYPE=Debug ../.. 
$ make 
$ 
$ cd ../release 
$ cmake -DCMAKE_BUILD_TYPE=Release ../.. 
$ make 

Si es necesario, se puede añadir otro script de construcción en el directorio build como tal:

#!/bin/sh 
cd debug && make && cd .. 
cd release && make && cd .. 
+0

¿qué pasa con el archivo sln de Visual Studio, también genera solo depuración o solo libera configuración o es compatible con ambos en el mismo archivo .sln? – user243655

+1

@ user243655: Parece que genera múltiples configuraciones: 'Debug',' Release', 'MinSizeRel' y' RelWithDebInfo'. –

+0

Muchas gracias por la información. – user243655

1

Esto se puede lograr utilizando el comando ADD_CUSTOM_TARGET. Por ejemplo, si desea añadir tanto los objetivos de depuración y liberación en su makefile, añada lo siguiente a su archivo CMakeLists.txt:

ADD_CUSTOM_TARGET(debug 
    COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug ${CMAKE_SOURCE_DIR} 
    COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target all 
    COMMENT "Creating the executable in the debug mode.") 

ADD_CUSTOM_TARGET(release 
    COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Release ${CMAKE_SOURCE_DIR} 
    COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target all 
    COMMENT "Creating the executable in the release mode.") 

Entonces, después de configurar con cmake, puede ejecutar make debug para hacer que el destino de depuración y ejecute make release para hacer que el objetivo de publicación esté en el mismo directorio.

Cuestiones relacionadas