Кажется, нам нужно создать отдельную папку для каждого типа сборки (debug/release), запустить cmake для каждого и создать отдельный make файл для конфигурации debug/release. Можно ли создать один файл makefile с помощью cmake, который одновременно поддерживает конфигурацию debug/release и когда мы на самом деле запускаем make, который создаст отдельные папки для промежуточных и конечных продуктов (например, dlls, exe).
Может ли Cmake генерировать один make файл, который поддерживает как отладку, так и выпуск
Ответ 1
Насколько я знаю, этого не может быть достигнуто с помощью одного набора сценариев сборки. Однако, что вы можете сделать, это иметь два подкаталога вашей рабочей области:
build/
build/debug
build/release
Тогда do:
$ cd build
$
$ cd build/debug
$ cmake -DCMAKE_BUILD_TYPE=Debug ../..
$ make
$
$ cd ../release
$ cmake -DCMAKE_BUILD_TYPE=Release ../..
$ make
При необходимости вы можете добавить еще одну сборку script в каталог build
как таковой:
#!/bin/sh
cd debug && make && cd ..
cd release && make && cd ..
Ответ 2
Это может быть достигнуто с помощью команды ADD_CUSTOM_TARGET
. Например, если вы хотите добавить как отладочные, так и высвобождающие цели в свой файл makefile, добавьте следующее в ваш файл 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.")
Затем, после настройки с помощью cmake, вы можете запустить make debug
, чтобы сделать цель отладки, и запустить make release
, чтобы сделать цель релиза в том же каталоге.