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

Visual Studio中CMake构建无法找到vcpkg安装的库求助

问题描述
  • 开发跨平台(Windows+树莓派)C++演示应用,使用vcpkg管理依赖库
  • 非CMake的Windows项目可正常调用vcpkg安装的库,但改用CMake构建Windows版本时,出现头文件找不到的错误:

fatal error C1083: Cannot open include file: 'boost/asio.hpp': No such file or directory
fatal error C1083: Cannot open include file: 'mqtt/async_client.h': No such file or directory
fatal error C1083: Cannot open include file: 'plog/Log.h': No such file or directory

  • 当前使用的CMakeLists.txt内容:
# Set to C++20 standard
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
#set(CMAKE_BUILD_TYPE debug)
# Set to C17 standard
set(CMAKE_C_STANDARD 17)
set(CMAKE_C_STANDARD_REQUIRED ON)
# Set vcpkg library path
set(CMAKE_TOOLCHAIN_FILE C:/vcpkg/scripts/buildsystems/vcpkg.cmake)
# Add source to this project's executable.
add_executable (Test main.cpp)

if (CMAKE_VERSION VERSION_GREATER 3.12)
  set_property(TARGET Test PROPERTY CXX_STANDARD 20)
endif()
解决方案

1. 调整工具链文件的设置时机

CMake要求**CMAKE_TOOLCHAIN_FILE必须在项目初始化(project命令执行)之前设置**,否则vcpkg的工具链无法正确集成。你的配置不仅晚于C/C++标准设置,甚至缺少project命令,这是核心问题。

修改后的CMakeLists.txt开头部分:

# 必须放在最顶部,project命令之前
set(CMAKE_TOOLCHAIN_FILE "C:/vcpkg/scripts/buildsystems/vcpkg.cmake" CACHE STRING "Vcpkg toolchain file")

# 初始化项目
project(TestApp CXX C)

# 设置C/C++标准
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_C_STANDARD 17)
set(CMAKE_C_STANDARD_REQUIRED ON)

add_executable(Test main.cpp)

2. 显式查找并链接依赖库

vcpkg通过CMake的find_package提供包支持,必须在配置中添加对应库的查找和链接代码,否则CMake不会自动添加头文件路径和库引用:

针对你用到的库,添加以下代码:

# 查找Boost.Asio(Boost包包含asio组件)
find_package(Boost REQUIRED COMPONENTS system)
target_link_libraries(Test PRIVATE Boost::system)

# 查找Paho MQTT C++库
find_package(paho-mqtt-cpp REQUIRED)
target_link_libraries(Test PRIVATE paho-mqtt-cpp::paho-mqtt-cpp)

# 查找plog日志库
find_package(plog REQUIRED)
target_link_libraries(Test PRIVATE plog::plog)

3. 确认vcpkg已安装对应依赖

确保你已针对Windows平台安装了所需库,以x64架构为例:

vcpkg install boost-asio paho-mqtt-cpp plog --triplet x64-windows

如果是32位项目,替换为x86-windows。

4. 可选:通过命令行传递工具链参数

若CMakeLists中设置工具链仍有问题,可直接在构建时通过命令行传递参数:

cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE=Debug
额外注意事项
  • 树莓派端构建时,需在设备上安装vcpkg,工具链文件路径对应为/home/pi/vcpkg/scripts/buildsystems/vcpkg.cmake,同时安装ARM架构的triplet(如arm64-linux)。
  • 确保工具链文件路径为绝对路径,避免因相对路径导致的查找失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:50:35