【发布时间】:2021-10-07 22:42:48
【问题描述】:
我想为我的存储库构建一个测试程序,启用未定义的行为清理(至少使用 GCC,也许还有 clang)。我知道如何手动执行此操作:
- 将
-fsanitize=undefined添加到编译标志 - 将
-lubsan添加到链接标志 - 确保安装了适当版本的
libubsan。
现在,在 CMake 中,我希望以下内容可以工作:
find_package(ubsan)
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR
CMAKE_CXX_COMPILER_ID STREQUAL "Clang" )
target_compile_options(my_test PRIVATE "-fsanitize=undefined")
endif()
target_link_libraries(ubsan::ubsan)
...但没有这样的版本(从 CMake 3.21.0-rc2 开始)。那么,我该怎么做呢?从某个地方获取 FindUBSan.cmake?也许做点别的?
PS - 这个问题同样适用于 C
【问题讨论】:
-
but there is no such version... 的版本?Make sure an appropriate version of libubsan is installed.什么意思?libubsan.so应该与编译器一起分发,至少在我的分发中它是gcc-libs包的一部分。
标签: gcc cmake clang idioms ubsan