问题 Cmake可以生成一个支持调试和发布的makefile


看起来我们需要为每个构建类型(调试/发布)创建单独的文件夹,在每个构建类型上运行cmake,并为调试/发布配置生成单独的makefile。是否可以使用cmake创建一个单独的makefile,它同时支持调试/发布配置,当我们实际运行“make”时,将为中间产品和最终产品(如dll,exe)创建单独的文件夹。


1295
2018-04-10 05:18


起源



答案:


据我所知,使用一组构建脚本无法实现这一点。但是,您可以做的是拥有工作区的两个子目录:

build/
build/debug
build/release

然后做:

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

如有必要,您可以在中添加另一个构建脚本 build 这样的目录:

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

9
2018-04-10 05:21



那个visual studio sln文件呢,它还会生成仅调试或仅发布配置,还是在同一个.sln文件中同时支持它们? - user243655
@ user243655:它似乎生成了多个配置: Debug, Release, MinSizeRel 和 RelWithDebInfo。 - André Caron
非常感谢您的信息。 - user243655


答案:


据我所知,使用一组构建脚本无法实现这一点。但是,您可以做的是拥有工作区的两个子目录:

build/
build/debug
build/release

然后做:

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

如有必要,您可以在中添加另一个构建脚本 build 这样的目录:

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

9
2018-04-10 05:21



那个visual studio sln文件呢,它还会生成仅调试或仅发布配置,还是在同一个.sln文件中同时支持它们? - user243655
@ user243655:它似乎生成了多个配置: Debug, Release, MinSizeRel 和 RelWithDebInfo。 - André Caron
非常感谢您的信息。 - user243655


这可以通过使用 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 在同一目录中创建发布目标。


2
2018-01-24 00:20