簡體   English   中英

如何在CMake中知道諸如'OpenCV'之類的變量

[英]How to know variable such as 'OpenCV' in CMake

我正在使用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"

另外,我的os是osx,我用brew安裝cmake 我手動編寫並安裝OpenCV

這些變量是隨OpenCV一起提供的包配置腳本的一部分。

請注意, find_package是一個雙頭野獸。 經典的操作模式是通過查找腳本查找庫。 這仍然是今天用於不了解CMake的第三方庫的方法。 但是,如果您的依賴項本身是使用CMake構建的,那么它可以提供包配置文件 ,這允許更強大的操作模式。

這里的想法是,不依賴於告訴CMake如何找到依賴關系,依賴關系本身告訴CMake客戶端如何找到它。 這是OpenCV和Qt等圖書館采用的方法。

要回答您的問題,這些變量由本地OpenCV安裝中的軟件包配置文件設置,其模板可以cmake/templates/OpenCVConfig.cmake.in的OpenCV源代碼中 cmake/templates/OpenCVConfig.cmake.in

它們在CMake OpenCV模塊中定義。 CMake有許多模塊可以幫助找到像OpenCV(FindOpenCV.cmake模塊)這樣的各種庫。 使用此命令,您可以獲得CMake支持的模塊列表:

cmake --help-module-list

有些庫帶有自己的* .cmake模塊,應該安裝在某些系統路徑中。 如果您使用的是Ubuntu,那么您的cmake模塊應該本地化為:

 /usr/share/cmake/Modules/

如果沒有,只需在系統中搜索FindOpenCV.cmake文件。 在該文件中,您將找到這些變量。

通常,您從要查找的包的文檔或源代碼中獲取變量名稱。

通常,您可以從提供的FindFoo.cmake模塊文件名派生名稱以放入find_package ,因為“Foo”將是名稱。 find模塊可以是CMake的一部分,也可以與第三方庫一起提供。
如果沒有find模塊,一些模塊提供FooConfig.cmake文件,其中“Foo”再次是放入find_package的字符串。
如果既沒有查找文件也沒有配置文件,則需要通過其他方式查找庫,例如FindPkgConfig或find_library / find_file

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM