我正在尝试配置vcpkg
使用地址消毒器和线程消毒器编译依赖项。为此,我需要将编译标志-fsanitize=address
或fsanitize=thread
传递给所有编译命令。阅读here,最好的方法似乎是使用vcpkg
中的“overlay-triplets”功能。然而,在documentation之后,我在项目的根目录下创建了一个custom-triplets
文件夹,其中包含两个名为x64-linux-asan
和x64-linux-tsan
的文件,它们看起来像:
set(VCPKG_TARGET_ARCHITECTURE x64)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE static)
set(VCPKG_CMAKE_SYSTEM_NAME Linux)
set(VCPKG_CXX_FLAGS "${VCPKG_CXX_FLAGS} -fsanitize=address")
字符串
现在,我不太明白如何配置CMake使用例如x64-linux-asan
三元组。我在manifest mode中使用vcpkg
。docs提到你可以创建一个vcpkg-configuration.json
文件来使用自定义三元组,但是如何从自定义文件列表中选择一个特定的三元组呢?我已经尝试过了:
cmake -B build -DVCPKG_TARGET_TRIPLET=x64-linux-asan
但是它不工作,vcpkg
抱怨说:
错误:无效的三元组:x64-linux-asan
1条答案
按热度按时间h4cxqtbf1#
要使用自定义三元组,您还必须设置
VCPKG_OVERLAY_TRIPLETS
变量,以便vcpkg可以找到它们。只需将其设置为包含自定义三元组的目录。我建议使用cmake命令来设置这些变量,以便它们自动填充:
字符串
有了这个,你可以创建一个继承这两个CMake变量的CMake脚本,并自动设置所有这些CMake变量,而不需要将它们烘焙到你的脚本中。