cmake - Cmake 创建 Makefile 支持不同配置的调试和发布
问题描述
是否可以使用 cMake 为调试和发布模式生成一个具有不同配置的 makefile?例如不同的 CXX 选项或安装可执行文件的不同路径?
这是一个基本的 cMakeList.txt,它为发布和调试模式创建了一个 makefile。
cmake_minimum_required(VERSION 3.10)
# set the project name
project(Tutorial)
# add the executable
add_executable(Tutorial main.cpp)
set(CMAKE_CXX_STANDARD 17)
ADD_CUSTOM_TARGET(debug
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.")
它如何扩展以支持不同的 Cxx 选项?
解决方案
在此CMakeLists.txt
文件中,您在原始项目的配置期间设置项目的第二个版本,该版本负责为发布版本生成项目的另一个版本。这种方法有几个缺点:
- 不能正确处理多配置生成器(例如 Visual Studio)
-DCMAKE_BUILD_TYPE=Release
如果您传递到原始设置,它会设置两次发布配置。- 它共享相同的二进制目录;这很容易把项目搞砸
我的建议是在所有允许的地方使用生成器表达式
target_link_libraries(my_target PRIVATE
$<$<CONFIG:Release>:libLinkedInReleaseOnly>
$<$<CONFIG:Debug>:libLinkedInDebugOnly>
)
# define preprocessor macro containg the configuration name
target_compile_definitions(my_target PRIVATE MY_CONFIG_DEFINE=\"$<CONFIG>\")
并回退到与配置相关的属性 和变量的版本(即包含<CONFIG>
在链接列表中)并在具有不同配置的多个构建目录中设置项目。
#bash example
for CONFIG in Debug Release
do
mkdir $CONFIG
cmake -D CMAKE_BUILD_TYPE=$CONFIG -S . -B $CONFIG
done
它允许您分别执行cmake --build Debug
或cmake --build Release
构建项目的调试或发布配置。(您可能希望将其设置在与源目录不同的位置,顺便说一句,这需要您传递不同的路径作为-S
参数。)
推荐阅读
- php - 无法调试位于网络驱动器上的 .php 文件
- python - 使用 numpy.nditer 访问不同的单元格
- datastax - cassandra 快照不适用于用户定义的冻结类型列表
- csv - 如何在 sas 存储过程中生成多个 CSV 文件?
- c# - 在 Delphi VCL 框架上显示 C# WinForms 面板
- python - 我想抓取这些产品信息
- c# - 无法运行使用 .net 6.0 构建的本机 iOS 应用程序:缺少 libhostpolicy.dylib
- java - 使用一维数组打印最长公共子序列 (LCS) 元素
- javascript - AES-GCM 与 Angular 中 Apple 的 CryptoKit 的兼容性
- python - 在缩放 QGraphicsItem 时设置转换点