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
相关产品推荐
相关产品推荐

