Как создать исполняемые цели, которые являются существующими целями с включенными специальными параметрами сборки? - PullRequest
0 голосов
/ 27 октября 2019

У меня есть проект C ++, который построен с использованием CMake.

Я использую проект sanitizers-cmake, чтобы разрешить создание целей с помощью Address Sanitizer и Memory Sanitizer. Файлы sanitizers-cmake определяют параметры SANITIZE_ADDRESS,

# In sanitizers-cmake/cmake/FindASan.cmake
option(SANITIZE_ADDRESS "Enable AddressSanitizer for sanitized targets." Off)

# In sanitizers-cmake/cmake/FindMSan.cmake
option(SANITIZE_MEMORY "Enable MemorySanitizer for sanitized targets." Off)

В моем проекте я определил библиотеку, исполняемый файл командной строки и набор тестов для модулей:

## Library target
add_library(my_proj include/my_proj.hpp src/my_proj.cpp)
target_include_directories(my_proj PUBLIC include)
add_sanitizers(my_proj)

## Command-line executable
add_executable(my-exe my-exe.cpp)
target_link_libraries(my-exe PRIVATE my_proj)

## Unit tests suite executable
add_executable(my_proj_tests tests/my_proj.t.cpp)
target_link_libraries(my_proj_tests
        my_proj
        gtest_main)
add_sanitizers(my_proj_tests)

Isможно определить какую-то псевдо-цель с именем my_proj_tests_asan, которая эквивалентна my_proj_tests с включенной опцией SANTIZIE_ADDRESS? Другими словами, я хотел бы определить что-то вроде:

add_target_copy(my_proj_tests_asan my_proj_tests)
add_target_options(my_proj_tests_asan SANITIZE_ADDRESS On)
...