如何为VSCode中CMake项目配置Address Sanitizer构建变体
为CMake项目配置Address Sanitizer构建变体
问题背景
我在Visual Studio Code中使用CMake 3.18.4开发C++项目(编译器为GCC 10.2.1),想要添加GCC的Address Sanitizer构建变体。已配置.vscode/cmake-variants.yaml如下:
buildType: default: debug choices: debug: short: Debug long: Disable optimizations - include debug information buildType: Debug asan: short: Asan long: Instrument with Address Sanitizer buildType: Asan
VSCode执行的CMake配置命令如下:
[main] Configuring project: example [proc] Executing command: /usr/bin/cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Asan -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_C_COMPILER:FILEPATH=/usr/bin/gcc -DCMAKE_CXX_COMPILER:FILEPATH=/usr/bin/g++ -S/workspaces/example -B/workspaces/example/build -G Ninja
需要在CMakeLists.txt中添加何种生成器表达式,才能在选中Asan构建变体时,让编译和链接选项包含-fsanitize=address?
解决方案
使用针对Asan构建类型的生成器表达式,分别为编译和链接阶段添加Sanitizer选项:
add_compile_options($<$<CONFIG:Asan>:-fsanitize=address>) add_link_options($<$<CONFIG:Asan>:-fsanitize=address>)
关键说明
- 生成器表达式
$<$<CONFIG:Asan>:-fsanitize=address>会在构建类型指定为Asan时,自动将-fsanitize=address参数注入到编译和链接流程中 - 该配置仅对
Asan构建变体生效,不会干扰Debug等其他构建类型的正常编译
内容的提问来源于stack exchange,提问作者PaulH
相关产品推荐
相关产品推荐

