Добавляйте дезинфицирующие средства только для отладки сборки в CMake - PullRequest
1 голос
/ 06 апреля 2020

Я пытаюсь добавить дезинфицирующие средства для отладочной сборки только в CMake. Как я понимаю:

  1. обычно вы добавляете дезинфицирующие средства следующим образом:

    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address,undefined")
    
  2. для совместимости с Visual Studio (и другими мультиконфигурационными генераторами ), Мне нужно использовать выражение генератора

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

    вместо, например, if(CMAKE_BUILD_TYPE STREQUAL "Debug").

Так как мне их объединить? Я пробовал

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'

1 Ответ

3 голосов
/ 06 апреля 2020

Самый простой способ установить флаги компилятора только для конкретная c конфигурация (тип сборки) добавляет эти флаги к соответствующим CMAKE_ _FLAGS_ переменная:

# 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> работает даже для custom типы сборок. Здесь <CONFIG> - это вариант прописного варианта типа сборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...