如何在CMakeLists.txt中不使用CMAKE_BUILD_TYPE区分模式设置宏
为不同编译模式设置不同宏(无需提前指定CMAKE_BUILD_TYPE)
问题描述
我希望为Debug模式和Release模式设置不同的宏,示例代码如下:
if (current_is_debug) add_compile_definitions(TAPD) else() add_compile_definitions(TAP) endif()我不想在CMakeLists.txt中设置CMAKE_BUILD_TYPE,因为我会在构建时指定编译模式,例如:
cmake --build . --config Debug cmake --build . --config Release请问是否有办法为不同编译模式设置不同的宏?
解决方案
当然可以,CMake的生成器表达式完美适配这种多配置场景(比如MSVC、Xcode这类支持通过--config指定构建模式的生成器),不需要提前硬编码CMAKE_BUILD_TYPE。
方法一:针对具体目标设置(推荐)
这种方式作用域清晰,符合CMake现代目标导向的用法:
# 假设你的目标是可执行文件my_target,也可以是库目标 add_executable(my_target main.cpp) # 为Debug模式添加TAPD宏,Release模式添加TAP宏 target_compile_definitions(my_target PRIVATE $<$<CONFIG:Debug>:TAPD> $<$<CONFIG:Release>:TAP> )
方法二:全局统一设置
如果需要给所有目标统一配置宏,可以使用全局的编译定义命令:
add_compile_definitions( $<$<CONFIG:Debug>:TAPD> $<$<CONFIG:Release>:TAP> )
生成器表达式$<CONFIG:XXX>会在构建阶段根据你通过--config指定的模式自动生效,完全满足动态选择构建模式的需求。
内容的提问来源于stack exchange,提问作者Mactarvish
相关产品推荐
相关产品推荐

