Может ли Cmake генерировать один make файл, который поддерживает как отладку, так и выпуск

Кажется, нам нужно создать отдельную папку для каждого типа сборки (debug/release), запустить cmake для каждого и создать отдельный make файл для конфигурации debug/release. Можно ли создать один файл makefile с помощью cmake, который одновременно поддерживает конфигурацию debug/release и когда мы на самом деле запускаем make, который создаст отдельные папки для промежуточных и конечных продуктов (например, dlls, exe).

Ответ 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, чтобы сделать цель релиза в том же каталоге.