添加消毒剂仅用于调试内置CMake



我正在尝试添加消毒剂,以便仅在CMake中调试构建。据我所知:

  1. 通常你会添加这样的消毒剂:

    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address,undefined")
    
  2. 为了与Visual Studio(和其他多配置生成器(兼容,我需要使用生成器表达式

    $<$<CONFIG:Debug>:-fsanitize=address,undefined>
    

    而不是例如CCD_ 1。

那么我该如何组合它们呢?我试过

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} $<$<CONFIG:Debug>:-fsanitize=address,undefined>")

set(SANITIZE_FLAGS "$<$<CONFIG:Debug>:-fsanitize=address,undefined>")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZE_FLAGS}")

两者都会导致类似的错误

no such file or directory: '../../../src/ffn.cc../../../src/ffn.ccCONFIG:Debug'

仅为特定配置(构建类型(设置编译器标志的最简单方法是将这些标志附加到相应的CMAKE_<LANG&gt_FLAGS_&lt;CONFIG>变量:

# Add sanitizer flags for C++ compiler for "Debug" configuration
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=address,undefined")

这种方式在像Visual Studio这样的多配置生成器的情况下非常有效。


设置CMAKE_<LANG>_FLAGS_<CONFIG>变量甚至适用于自定义构建类型。这里<CONFIG>是构建类型的大写变体。

最新更新