You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu+VSCode环境下仅通过vcpkg引入指定库的CMake配置疑问

用vcpkg在Ubuntu+VSCode中管理依赖的完整流程

一、实现vcpkg的项目级迁移(类npm install效果)

你已经将vcpkg安装在项目内,只需两步就能让项目迁移后无需重新执行安装命令:

  1. 在项目根目录创建vcpkg.json,明确依赖列表:
{
  "name": "your-project-name",
  "version-string": "0.1.0",
  "dependencies": [
    "assimp",
    "imgui",
    "glfw3",
    "glad"
  ]
}
  1. 迁移时直接打包整个项目文件夹(包含vcpkg目录和vcpkg.json),后续只需配置CMake指定toolchain,vcpkg会自动完成依赖安装。

二、拆解你困惑的CMake指令

先明确各指令的核心作用,避免混乱:

  • find_package(XXX REQUIRED):CMake标准查找逻辑,优先读取库的CMake配置文件(如XXXConfig.cmake)找到库的头文件、库文件路径。未指定vcpkg toolchain时,会优先搜索系统目录。
  • find_library(XXX_LIBRARY XXX):底层查找逻辑,直接定位编译好的库文件(如libXXX.so),适合无CMake配置文件的库,但灵活性远低于find_package。
  • include_directories():全局添加头文件路径,所有编译目标都会生效,容易引发路径冲突,不推荐。
  • target_include_directories():为特定编译目标添加头文件路径,是现代CMake的推荐写法,精准可控。
  • target_link_libraries():将库链接到目标可执行文件/库,这是最终生效步骤,但前提是CMake已正确找到依赖库。

三、关键:让CMake优先使用vcpkg的库

要让find_package从项目内的vcpkg查找库,必须指定vcpkg的toolchain文件,两种配置方式:

  1. VSCode自动配置:在.vscode/settings.json中添加:
{
  "cmake.configureSettings": {
    "CMAKE_TOOLCHAIN_FILE": "${workspaceFolder}/vcpkg/scripts/buildsystems/vcpkg.cmake"
  }
}

后续VSCode运行CMake配置时,会自动加载该toolchain,无需手动输入参数。
2. 终端手动配置:执行CMake时添加参数:

cmake -B build -DCMAKE_TOOLCHAIN_FILE=./vcpkg/scripts/buildsystems/vcpkg.cmake

四、针对你的依赖的具体CMakeLists.txt写法

直接复制以下代码到项目根目录的CMakeLists.txt,替换your-project-name和your-executable为你的项目名和可执行文件名:

cmake_minimum_required(VERSION 3.20)
project(your-project-name)

# 设置C++标准
set(CMAKE_CXX_STANDARD 17)

# 查找依赖库
find_package(assimp REQUIRED)
find_package(glfw3 REQUIRED)
find_package(glad REQUIRED)
find_package(imgui REQUIRED)
# OpenGL为系统自带库,直接用find_package即可,vcpkg不会覆盖系统OpenGL
find_package(OpenGL REQUIRED)

# 添加可执行目标
add_executable(your-executable src/main.cpp)

# 链接所有依赖(自动处理头文件路径,无需额外配置)
target_link_libraries(your-executable
    PRIVATE
    assimp::assimp
    glfw
    glad::glad
    imgui::imgui
    OpenGL::GL
)

说明:

  • vcpkg安装的库会生成对应的命名目标(如assimp::assimp),这些目标已包含头文件路径和库文件路径,无需手动添加target_include_directories。
  • PRIVATE表示依赖仅作用于当前可执行目标,不会传递给其他依赖该目标的库,符合现代CMake规范。

五、验证依赖是否生效

配置完成后,运行CMake配置并编译项目。可检查build目录下的CMakeCache.txt,搜索assimp_DIR,若指向项目内vcpkg的安装路径(而非系统目录),则说明配置成功。

内容的提问来源于stack exchange,提问作者deepfreeze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 04:45:36