¿Puede Cmake generar un solo archivo MAKE que admita tanto la depuración como la liberación?

2 minutos de lectura

Parece que necesitamos crear una carpeta separada para cada tipo de compilación (depuración/lanzamiento), ejecutar cmake en cada uno y generar un archivo MAKE separado para la configuración de depuración/lanzamiento. ¿Es posible crear un solo archivo MAKE usando cmake que admita la configuración de depuración/liberación al mismo tiempo y cuando ejecutamos “make” que creará carpetas separadas para los productos intermedios y finales (como los dlls, exe).

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

build/
build/debug
build/release

Entonces hazlo:

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

Si es necesario, puede agregar otro script de compilación en el build directorio como tal:

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

  • ¿Qué pasa con el archivo sln de Visual Studio, también genera solo depuración o solo versión de configuración o es compatible con ambos en el mismo archivo .sln?

    – usuario243655

    10 de abril de 2012 a las 5:29

  • @ user243655: parece generar múltiples configuraciones: Debug, Release, MinSizeRel y RelWithDebInfo.

    – André Carón

    10 de abril de 2012 a las 5:35

Esto se puede lograr usando el ADD_CUSTOM_TARGET dominio. Por ejemplo, si desea agregar objetivos de depuración y lanzamiento en su archivo MAKE, agregue 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.")

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

  • ¿Qué sucede si no los quiero en el mismo directorio (sino en subdirectorios separados)?

    – definitivamente

    8 sep 2021 a las 0:45


  • @def: CMAKE_BINARY_DIR se define y almacena en caché en función del directorio en el que ejecuta el cmake dominio. Sin embargo, después de construir podemos instalarlo en otra ubicación. También puede copiar el ejecutable de compilación en directorios separados:

    – a.sam

    8 sep 2021 a las 15:00

¿Ha sido útil esta solución?