使用VCPKG清单模式时CMake无法找到OpenCV的原因
问题:VCPKG构建OpenCV后CMake无法找到它
用户配置文件
CMakeLists.txt
cmake_minimum_required(VERSION 3.24) File(TO_CMAKE_PATH $ENV{VCPKG_ROOT} VCPKG_ROOT) message(STATUS ${VCPKG_ROOT}) set(CMAKE_TOOLCHAIN_FILE "${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" CACHE STRING "") set(VCPKG_TARGET_TRIPLET "x64-windows-static" CACHE STRING "") project(my_project) find_package(OpenCV REQUIRED) set(INCLUDE_DIR "src/include" ) include_directories(${INCLUDE_DIR}) # Set C++ standard to 20 set(CMAKE_CXX_STANDARD 20) file(GLOB_RECURSE INCLUDE_FILES "src/include/*.h" "src/include/*.hpp") add_executable(ReadSample "src/readsample/main.cpp" ${INCLUDE_FILES}) set_property(TARGET ReadSample PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<$<CONFIG:Debug>:Debug>") # Include directories for header files target_link_libraries(ReadSample ${OpenCV_LIBS})
vcpkg.json
{ "version": "1.0.0", "dependencies": [ { "name": "opencv", "features": [ "ffmpeg" ] } ] }
错误信息
D:/Local/vcpkg/scripts/buildsystems/vcpkg.cmake:859 (_find_package) CMakeLists.txt:11 (find_package)
可能的原因及解决步骤
工具链文件设置方式错误:CMake要求
CMAKE_TOOLCHAIN_FILE必须在project()命令前生效,代码中用CACHE STRING会导致首次配置时可能无法正确加载工具链。修改为直接设置,去掉缓存声明:set(CMAKE_TOOLCHAIN_FILE "${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake")目标三元组不匹配:确认vcpkg已安装对应三元组的OpenCV,手动执行命令:
vcpkg install opencv[ffmpeg]:x64-windows-static确保安装过程无报错。
构建缓存干扰:删除现有构建目录,重新运行CMake并手动指定参数,避免缓存残留:
# 手动删除build文件夹,或执行命令 rm -rf build cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=D:/Local/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows-staticVCPKG_ROOT路径验证:确认环境变量
VCPKG_ROOT路径正确,可修改message语句输出更明确的信息:message(STATUS "VCPKG_ROOT path: ${VCPKG_ROOT}")若输出为空或路径错误,需检查系统环境变量配置。
包名大小写排查:部分环境下CMake对包名大小写敏感,尝试修改为小写:
find_package(opencv REQUIRED)
内容的提问来源于stack exchange,提问作者mans
相关产品推荐
相关产品推荐

