通过 vcpkg 安装包导致 "opencv2/opencv.hpp: No such file or directory" 错误

Installing package via vcpkg causing a "opencv2/opencv.hpp: No such file or directory" error

我已经使用 vcpkg 安装了 vcpkg 和 opencv 以尝试在 c++ 中导入 opencv 库,但我不断收到以下错误:

main.cpp:2:10: fatal error: opencv2/opencv.hpp: No such file or directory
    2 | #include <opencv2/opencv.hpp>

这是我的简单 main.cpp:

#include <iostream>
#include <opencv2/opencv.hpp>       //I have also tried using "" instead

using namespace cv;                 //I have tried not using this line

int main(int, char**) {
    std::cout << "Hello, world!\n";
}

我已经测试过这是否是 opencv 的问题,但是当我安装并尝试通过 vcpkg 导入 booster 库时,同样的问题仍然存在。

我有一个 windows 10,我目前正在使用 VScode 作为我的主编辑器,尽管我不认为这是一个 VScode 问题,因为这无关紧要无论是在 atom、vscode 或 windows 终端、cygwin 或 powershell 中使用 运行 包,都会弹出相同的错误。

我尝试了很多方法,包括卸载并重新安装 vcpkg、将库和 bin 文件添加到系统环境变量的路径、将所有内容重新安装到我的 C: 驱动器而不是我的 D: 驱动器、使用 cmake 甚至更改#include 语句的以下变体:

#include <opencv2>
#include <opencv>

但是,当我改用以下导入语句时,我注意到:

#include <C:\Users\nick-\DEV\opencv\build\include\opencv2\opencv.hpp>

我收到这个错误:

C:\Users\nick-\DEV\opencv\build\include\opencv2\opencv.hpp:48:10: fatal error: opencv2/opencv_modules.hpp: No such file or directory
   48 | #include "opencv2/opencv_modules.hpp"

起源于opencv库的文件之一。

我正在使用 vcpkg,因为我之前尝试过使用 cmake,但问题没有解决,另一个 Whosebug link 是 [这里][1],以防它有点帮助。 (我尝试了建议的方法,我找到了 opencv 库并将其移动到正确的地址,但没有帮助)

编辑: 根据@Alan Birtles 的建议,最小可重现示例, 这些是我执行的步骤:

编辑: 尝试重新合并 cmake 按照@Genjutsu 在评论中的建议,我已经完成了以下步骤来重新设置 cmake 并让它工作(它没有工作)

cmake_minimum_required(VERSION 3.0.0)
project(fpc VERSION 0.1.0)

include(CTest)
enable_testing()

set(CMAKE_TOOLCHAIN_FILE "C:/Users/nick-/DEV/vcpkg/scripts/buildsystems/vcpkg.cmake")
set(CMAKE_PREFIX_PATH "C:/Users/nick-/DEV/vcpkg/installed/x64-windows")

find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(fpc main.cpp)

target_link_libraries(fpc ${OpenCV_LIBS})

message("OpenCV_INCLUDE_DIRS: " ${OpenCV_INCLUDE_DIRS})
message("OpenCV_LIBS: " ${OpenCV_LIBS})

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

这给我以下输出:

[main] Configuring folder: floorplan pathfinder cpp 
[cmake] Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.19043.
[cmake] OpenCV_INCLUDE_DIRS: C:/Users/nick-/DEV/opencv/build/include
[cmake] OpenCV_LIBS: opencv_calib3dopencv_coreopencv_dnnopencv_features2dopencv_flannopencv_gapiopencv_highguiopencv_imgcodecsopencv_imgprocopencv_mlopencv_objdetectopencv_photoopencv_stitchingopencv_videoopencv_videoioopencv_world
[cmake] Configuring done
[cmake] Generating done
{
    "cmake.configureSettings": {
        "CMAKE_TOOLCHAIN_FILE": "D:/Program Files/vcpkg/scripts/buildsystems/vcpkg.cmake"
    }
}

编辑: 添加了清单文件(还编辑了 cmake 文件) 所以我尽我所能添加了一个 vcpkg.json 清单文件,如下所示。并使用上面反映的更改修改了我的 CMakeLists.txt 文件。

{
    "name": "example",
    "version-string": "0.0.1",
    "dependencies": [
      "OpenCV"
    ]
  }

简单地说:
a) VS Code 不受 vcpkg 集成安装的影响,只有 MSBuild 是 ...
b) 设置 CMAKE_TOOLCHAIN_FILE 仅在第一个 project() 调用
之前有效 c) 如果已经配置了 cmake 缓存,则通过 cmake.configureSettings 或其他方式在 project() 之前设置 CMAKE_TOOLCHAIN_FILE 将不起作用。 d) 不要修改 CMAKE_PREFIX_PATH

因此,从一个没有任何缓存的干净的 cmake 构建开始:通过您想要的任何方式在 project() 之前设置 CMAKE_TOOLCHAIN_FILE 并且它有效。您可能还需要设置 VCPKG_TARGET_TRIPLET。 (使用 #include <opencv2/opencv.hpp> 似乎没问题)