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

使用PMM+VCPKG时find_package无法找到包目录的咨询

问题:使用pmm的VCPKG模式时,find_package无法找到已安装的依赖包

我正在使用pmm工具的VCPKG模式为项目添加依赖库,pmm安装正常,依赖包也已完成安装,但执行cmake的find_package(x)命令时,提示无法找到对应包。

经过调试,我手动将包的安装路径添加到cmake配置后功能恢复正常,但不确定该路径的通用性,想咨询:

  • 如何无需手动指定路径即可正常使用?
  • 是否必须添加该路径?
  • 是否我对pmm的文档理解有误?

我的CMakeLists.txt代码如下:

cmake_minimum_required(VERSION 3.10)
project(pmmAndVcpkg VERSION 0.0.0)

set(VCPKG_REV 2022.05.10)

include(pmm.cmake)
pmm(
    VCPKG
    REVISION ${VCPKG_REV}
    REQUIRES fmt
)

# 为什么我需要这段代码???
################################

set(VCPKG_PATH $ENV{HOME}/.local/share/pmm/${PMM_VERSION_INIT}/vcpkg-${VCPKG_REV}/packages)

set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR} ${VCPKG_PATH} ${CMAKE_MODULE_PATH})
set(CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR} ${VCPKG_PATH} ${CMAKE_PREFIX_PATH})
################################

find_package(fmt CONFIG REQUIRED)

add_executable(main main.cpp)

target_link_libraries(main PRIVATE fmt)

除该文件外,我仅添加了要求的pmm.cmake文件和用于验证链接的main.cpp文件。


解决方案

你完全不需要手动添加CMAKE_MODULE_PATH和CMAKE_PREFIX_PATH——pmm的VCPKG模式设计目标就是自动处理这些路径配置,出现这个问题大概率是配置流程中的某个环节出现了异常,以下是排查和解决步骤:

1. 清理CMake缓存,重新生成

手动添加过路径后,CMake会缓存这些配置,即使后续移除手动配置也可能残留影响。执行以下操作:

  • 删除项目的build目录(或你用来生成构建文件的目录)
  • 重新运行CMake生成命令

2. 确认pmm是否正确初始化VCPKG工具链

pmm的VCPKG模式会自动下载指定版本的VCPKG,并配置CMake使用VCPKG的工具链文件。你可以检查CMake的输出日志,看是否包含类似-- Using vcpkg toolchain: ...的信息。如果没有,说明pmm没有正确完成工具链配置,可能的原因:

  • 你的pmm版本与指定的VCPKG版本(2022.05.10)不兼容:尝试更新pmm到最新版本,或者匹配对应VCPKG版本的pmm版本
  • pmm下载VCPKG时出现网络问题:查看pmm的输出日志是否有下载失败的提示,手动确认$ENV{HOME}/.local/share/pmm/${PMM_VERSION_INIT}/vcpkg-${VCPKG_REV}目录是否存在且完整

3. 检查find_package的调用与路径逻辑

对于VCPKG安装的包,find_package(fmt CONFIG REQUIRED)是正确的调用方式,但需要注意:VCPKG的包配置文件实际存放在installed/<triplet>目录下(而非你手动指定的packages临时编译目录),pmm应该自动将这个正确路径添加到CMAKE_PREFIX_PATH中。你手动指定的packages目录并非通用路径,不应该依赖它。

4. 尝试显式指定VCPKG_TRIPLET(可选)

如果你的系统架构与VCPKG默认triplet不匹配,可能导致找不到包。可以在pmm命令中添加TRIPLET参数,例如:

pmm(
    VCPKG
    REVISION ${VCPKG_REV}
    REQUIRES fmt
    TRIPLET x64-linux # 根据你的系统替换,比如x64-windows、arm64-linux等
)

5. 验证pmm的环境变量初始化

pmm执行后会设置VCPKG_ROOT等环境变量,你可以在CMakeLists.txt中添加一行输出验证:

message(STATUS "VCPKG_ROOT: ${VCPKG_ROOT}")

如果输出为空,说明pmm没有正确初始化VCPKG环境,需要检查pmm.cmake的完整性,或重新下载最新版本的pmm.cmake。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 23:21:32