在manifest模式下使用vcpkg和CMake的自定义三元组

k5hmc34c  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(57)

我正在尝试配置vcpkg使用地址消毒器和线程消毒器编译依赖项。为此,我需要将编译标志-fsanitize=addressfsanitize=thread传递给所有编译命令。阅读here,最好的方法似乎是使用vcpkg中的“overlay-triplets”功能。然而,在documentation之后,我在项目的根目录下创建了一个custom-triplets文件夹,其中包含两个名为x64-linux-asanx64-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中使用vcpkgdocs提到你可以创建一个vcpkg-configuration.json文件来使用自定义三元组,但是如何从自定义文件列表中选择一个特定的三元组呢?我已经尝试过了:
cmake -B build -DVCPKG_TARGET_TRIPLET=x64-linux-asan
但是它不工作,vcpkg抱怨说:
错误:无效的三元组:x64-linux-asan

h4cxqtbf

h4cxqtbf1#

要使用自定义三元组,您还必须设置VCPKG_OVERLAY_TRIPLETS变量,以便vcpkg可以找到它们。只需将其设置为包含自定义三元组的目录。
我建议使用cmake命令来设置这些变量,以便它们自动填充:

{
  "name": "vcpkg",
  "hidden": true,
  "cacheVariables": {
    "VCPKG_OVERLAY_TRIPLETS": "${sourceDir}/triplets",
    "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
  }
},
{
  "name": "linux-asan",
  "hidden": true,
  "cacheVariables": {
    "VCPKG_TARGET_TRIPLET": "x64-linux-asan"
  }
},

字符串
有了这个,你可以创建一个继承这两个CMake变量的CMake脚本,并自动设置所有这些CMake变量,而不需要将它们烘焙到你的脚本中。

相关问题