У меня есть проект 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)