如何知道 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
文件中,有OpenCV
和OpenCV_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,我安装cmake
和brew
。我手动编译并安装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”等变量的主要内容,如果未能解决你的问题,请参考以下文章