CMake 在编译使用 OpenCV 的项目时遇到问题
Posted
技术标签:
【中文标题】CMake 在编译使用 OpenCV 的项目时遇到问题【英文标题】:CMake is having problems to compile a project which uses OpenCV 【发布时间】:2019-09-20 06:58:02 【问题描述】:我使用的是 Linux Mint 19.1 Tessa。
我按照here 中的说明安装 OpenCV。现在我将它安装在目录“/home/dell/opencv”中。
我尝试通过运行命令“cmake”来运行位于“/home/dell/opencv/samples/cpp/example_cmake/”的示例项目。在终端上,我收到以下错误:
CMake Error at CMakeLists.txt:14 (find_package):
By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "OpenCV", but
CMake did not find one.
Could not find a package configuration file provided by "OpenCV" with any
of the following names:
OpenCVConfig.cmake
opencv-config.cmake
Add the installation prefix of "OpenCV" to CMAKE_PREFIX_PATH or set
"OpenCV_DIR" to a directory containing one of the above files. If "OpenCV"
provides a separate development package or SDK, be sure it has been
installed.
-- Configuring incomplete, errors occurred!
See also "/home/dell/opencv/samples/cpp/example_cmake/CMakeFiles/CMakeOutput.log".
“CMakeLists.txt”文件包含以下内容:
# cmake needs this line
cmake_minimum_required(VERSION 3.1)
# Enable C++11
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
# Define project name
project(opencv_example_project)
# Find OpenCV, you may need to set OpenCV_DIR variable
# to the absolute path to the directory containing OpenCVConfig.cmake file
# via the command line or GUI
find_package(OpenCV REQUIRED)
# If the package has been found, several variables will
# be set, you can find the full list with descriptions
# in the OpenCVConfig.cmake file.
# Print some message showing some of them
message(STATUS "OpenCV library status:")
message(STATUS " config: $OpenCV_DIR")
message(STATUS " version: $OpenCV_VERSION")
message(STATUS " libraries: $OpenCV_LIBS")
message(STATUS " include path: $OpenCV_INCLUDE_DIRS")
# Declare the executable target built from your sources
add_executable(opencv_example example.cpp)
# Link your application with OpenCV libraries
target_link_libraries(opencv_example LINK_PRIVATE $OpenCV_LIBS)
我在互联网上搜索了很多,这似乎是一个常见问题。但是,按照我找到的说明,我仍然没有设法解决它。
我在浏览 OpenCV 文件夹时注意到的一件事是我拥有的版本(我认为它是最新的)确实不包含任何“OpenCVConfig.cmake”文件,如您所见 @987654322 @。但是,我在 github 上找到的最旧版本的 OpenCV 有这个文件,你可以看到 here。
那么,也许某些配置设置为这个最旧的版本并导致冲突?如何更改它并使其适用于最新版本?我认为这一定很容易解决,但我是新手。
提前致谢。
【问题讨论】:
【参考方案1】:CMake 会告诉你该怎么做:
将“OpenCV”的安装前缀添加到CMAKE_PREFIX_PATH或设置 “OpenCV_DIR”到包含上述文件之一的目录。
另一种选择 - 请再次阅读您粘贴的文件 CMakeLists.txt
中的 cmets。
他们说:
您可能需要设置 OpenCV_DIR 变量 到包含 OpenCVConfig.cmake 的目录的绝对路径
另一个问题 - 源代码构建,通过将点传递给 cmake 来执行。最好为构建文件创建单独的目录。
以这种方式构建可以让您轻松地将构建目录添加到.gitignore
,并且不会使用已编译的二进制文件污染您的源代码存储库。此外,如果出现问题,您可以删除该构建目录并从头开始。这比一个一个地处理文件要容易得多。
所以,你需要像下面这样调用 CMake
mkdir build
cd build
OpenCV_DIR=/home/dell/opencv cmake ..
或
mkdir build
cd build
cmake .. -DCMAKE_PREFIX_PATH=/home/dell/opencv
或者以下也可以解决问题
mkdir build
cd build
cmake .. -DOpenCV_DIR=/home/dell/opencv
【讨论】:
感谢您的回答。但我的问题是我安装的 OpenCV 版本中没有“OpenCVConfig.cmake”文件(我的帖子中指出的那个)。我认为 OpenCV 的最新版本不包含它。但由于某种原因,在使用 CMake 编译时需要它。 你做了make install
吗? OpenCVConfig.cmake
在安装时生成
我刚刚克隆了 OpenCV repository,写着:git clone https://github.com/opencv/opencv.git git clone https://github.com/opencv/opencv_contrib.git
,正如官方 guide 所指出的那样。不是正确的安装方式吗?我应该怎么做?谢谢回答
看来,您只完成了说明中列出的 10 个点中的第一个点(包括可选点)。请完成其余的工作(配置,make
,make install
)。只有这样你才能编译示例。
啊,我是个笨蛋……我认为你是对的。我会尝试运行其余的程序,然后我说是否可以。我认为这是做同一件事的不同方式。【参考方案2】:
如下更新您的 OpenCV 搜索目录路径,
find_package(OpenCV 3.4 REQUIRED PATHS "/usr/local/opencv/" NO_DEFAULT_PATH)
【讨论】:
以上是关于CMake 在编译使用 OpenCV 的项目时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章
Win10专业版,CMake3.8.2,opencv3.3.0,自编译,ffmpeg文件
如何使用 CMake 简单地将 opencv 包含在我的项目中