cmake如何知道包含文件和库的位置?

时间:2016-06-30 11:44:39

标签: c++ opencv gcc cmake

我正在使用cmake成功编译一个用C ++和OpenCV编写的简单DisplayImage项目。我按照这些说明操作:http://docs.opencv.org/3.0-beta/doc/tutorials/introduction/linux_gcc_cmake/linux_gcc_cmake.html。我真的无法了解cmake如何从CMakeLists.txt文件中检索OpenCV包含和库:

cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( DisplayImage DisplayImage.cpp )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )

我的意思是我不应该告诉它在哪里搜索OpenCV?例如/ usr / local / lib或/ usr / local / include / opencv ...
如何通过告诉它我想使用OpenCV而不指定在哪里查找它来使用OpenCV?我想我错过了什么......请帮忙!

1 个答案:

答案 0 :(得分:1)

find_package将运行一个cmake模块(即一个脚本),它将在例如在OpenCV的预定义目录中。该模块将设置cmake变量,如OpenCV_INCLUDE_DIRS和OpenCV_LIBS。正如您所做的那样,您仍然需要将这些目录和库添加到项目中的相应列表中,因为这取决于项目正在执行的操作:您可能在同一个make文件中构建多个可执行文件和/或库,但可能不希望将所有库链接到所有可执行文件/库。

如果您对模块的工作原理感兴趣,可以查看一下。通常你会在/usr/share/cmake-2.8/Modules中找到它(替换" 2.8"使用你正在使用的cmake版本)。我的机器上没有FindOpenCV.cmake文件,所以我猜它会随OpenCV而来。其他查找脚本随cmake本身一起提供,因此您将拥有大量文件。 (该目录还有其他模块,而不仅仅是find_package脚本。)

相关问题