如何知道 CMake 中的“OpenCV”等变量

Posted

技术标签:

【中文标题】如何知道 CMake 中的“OpenCV”等变量【英文标题】:How to know variable such as 'OpenCV' in CMake 【发布时间】:2018-01-16 06:58:51 【问题描述】:

我将 OpenCV 与 gcc 和 cmake 一起使用。并且找到了一个教程https://docs.opencv.org/3.4.0/db/df5/tutorial_linux_gcc_cmake.html。在CMakeLists.txt文件中,有OpenCVOpenCV_INCLUDE_DIRS等一些变量。

cmake_minimum_required(VERSION 3.9)
project(VideoRecord)

set(CMAKE_CXX_STANDARD 11)
find_package(OpenCV REQUIRED)

include_directories($OpenCV_INCLUDE_DIRS)

add_executable(VideoRecord main.cpp)
target_link_libraries(VideoRecord $OpenCV_LIBS)

我想知道在哪里可以找到这些变量定义。

编辑

感谢@qbranchmaster 的回答。我尝试搜索FindOpenCV.cmake,但失败了。

第一次尝试。

➜  ~ cmake --help-module-list | grep "FindOpen"
FindOpenACC
FindOpenAL
FindOpenCL
FindOpenGL
FindOpenMP
FindOpenSSL
FindOpenSceneGraph
FindOpenThreads

再试一次。

➜  / find . "FindOpenCV.cmake"

另外,我的操作系统是osx,我安装cmakebrew。我手动编译并安装OpenCV

【问题讨论】:

@usr1234567 我可以成功运行我的演示,这意味着cmake 可以找到这些变量。 【参考方案1】:

这些变量是 OpenCV 附带的包配置脚本的一部分。

注意find_package 是一个双头野兽。经典的操作模式是查找库through find-scripts。这仍然是今天用于不了解 CMake 的第三方库的方法。但是,如果您的依赖项本身是使用 CMake 构建的,则它可以提供 a package config file,从而实现更强大的操作模式。

这里的想法是,不是您告诉 CMake 如何找到依赖项,而是依赖项本身告诉 CMake 客户端如何找到它。这是 OpenCV 和 Qt 等库所采用的方法。

为了回答您的问题,这些变量是由本地 OpenCV 安装中的包配置文件设置的,其模板为 can be found in the OpenCV source code 下的 cmake/templates/OpenCVConfig.cmake.in

【讨论】:

【参考方案2】:

它们在 CMake OpenCV 模块中定义。 CMake 有许多模块可以帮助查找各种库,例如 OpenCV(FindOpenCV.cmake 模块)。 使用此命令,您可以获得 CMake 支持的模块列表:

cmake --help-module-list

一些库带有自己的 *.cmake 模块,应该安装在某些系统路径中。如果您使用的是 Ubuntu,您的 cmake 模块应本地化为:

 /usr/share/cmake/Modules/

如果没有,只需在系统中搜索文件 FindOpenCV.cmake。在该文件中,您将找到这些变量。

【讨论】:

【参考方案3】:

一般情况下,您可以从文档或要查找的包的源代码中获取变量名。

您通常可以从提供的 FindFoo.cmake 模块文件名中派生要放入 find_package 的名称,因为“Foo”将是名称。 find 模块要么是 CMake 的一部分,要么是随第三方库一起提供的。 如果没有 find 模块,一些模块会提供 FooConfig.cmake 文件,其中“Foo”再次是要放入 find_package 的字符串。 如果您既没有 find 也没有 config 文件,则需要通过其他方式查找库,例如 FindPkgConfig 或 find_library / find_file

【讨论】:

以上是关于如何知道 CMake 中的“OpenCV”等变量的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CMake 简单地将 opencv 包含在我的项目中

将Opencv加入到环境变量中

CMake:无法设置变量以使用 OpenCV 关闭

如何简单地将opencv包含在CMake的项目中

cmake 如何知道包含文件和库在哪里?

CMake错误配置opencv