CMake CONFIG 生成器表达式

cmake 的 CONFIG 生成器表达式有两种形式,一种是不接受参数、输出当前的 CONFIG 值,还有一种是判断当前的 CONFIG 是否属于几者之一。在判断 Debug 模式的时候一定要小心,因为使用 Makefile 作为生成器时,不传入 CMAKE_BUILD_TYPE 时使用的 CONFIG 为空。

target_compile_options(YourTarget PRIVATE 
    -Wall 
    $<$<CONFIG:,Debug>:-g3>
)

不过,也可以通过显式设置 CMAKE_BUILD_TYPE 来防范就是了:

if (NOT CMAKE_BUILD_TYPE)
  set(CMAKE_BUILD_TYPE "Debug")
endif()

这样之后再用生成表达式创建自定义 target 打印 $<CONFIG> 的结果就是 Debug。

如果不显式设置,则会使用编译器特定的默认编译模式,这个就说不清楚了。