end*_*gly 4 clang libc++ vcpkg
vcpkg在Linux上默认使用GCC安装包。我看到官方文档提到了自定义三元组方法,但没有提到clang工具链。
如何指定clang和libc++作为vcpkg的默认工具链?
为了强制 vcpkg 使用特定工具链编译库,您可以将变量设置VCPKG_CHAINLOAD_TOOLCHAIN_FILE为自定义三元组文件(也称为覆盖三元组)内的适当工具链文件。
例如,我在我的linux环境中手动安装了clang-13。默认的 CXX 编译器是 GCC。
这是我写的文件内容clang-13-toolchain.cmake:
set(CMAKE_C_COMPILER "/usr/bin/clang-13")
set(CMAKE_CXX_COMPILER "/usr/bin/clang++-13")
message("clang-13 toolchain CMAKE_C_COMPILER = ${CMAKE_C_COMPILER}")
message("clang-13 toolchain CMAKE_CXX_COMPILER = ${CMAKE_CXX_COMPILER}")
Run Code Online (Sandbox Code Playgroud)
这是三元组文件的内容x64-linux-clang-13.cmake:
set(VCPKG_TARGET_ARCHITECTURE x64)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE static)
set(VCPKG_CMAKE_SYSTEM_NAME Linux)
set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE ${CMAKE_CURRENT_LIST_DIR}/../toolchains/clang-13-toolchain.cmake)
message("clang-13 triplet CMAKE_C_COMPILER = ${CMAKE_C_COMPILER}")
message("clang-13 triplet CMAKE_CXX_COMPILER = ${CMAKE_CXX_COMPILER}")
Run Code Online (Sandbox Code Playgroud)
假设您有一个 cmake 项目,并且在“清单模式”下使用 vcpkg,则必须告诉 vcpkg 使用您的自定义三元组(使用 clang-13 工具链),并告诉 cmake 也使用相同的工具链。
因此,在主 CMakeLists.txt 中调用 project() 之前,必须设置以下内容:
CMAKE_TOOLCHAIN_FILE- 指向vcpkg工具链文件VCPKG_OVERLAY_TRIPLETS- 指向包含自定义三元组的目录(x64-linux-clang-13.cmake)VCPKG_TARGET_TRIPLET- 应设置为“x64-linux-clang-13”VCPKG_CHAINLOAD_TOOLCHAIN_FILE- 应指向 clang-13-toolchain.cmake 的位置。CMakePresets.json为此使用文件很方便。