【问题标题】:How can cmake know where the include files and libs are?cmake 如何知道包含文件和库在哪里?
【发布时间】:2016-06-30 11:44:39
【问题描述】:

我正在使用 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?我想我错过了一些东西..请帮忙!

【问题讨论】:

标签: c++ opencv gcc cmake


【解决方案1】:

find_package 将运行一个 cmake 模块(即脚本),它看起来例如在 OpenCV 的预定义目录中。该模块将设置 cmake 变量,如 OpenCV_INCLUDE_DIRS 和 OpenCV_LIBS。正如您所做的正确,您仍然必须将这些目录和库添加到项目中的适当列表中,因为这取决于您的项目正在做什么:您可能在同一个 make 文件中构建多个可执行文件和/或库,但可能不想将所有库链接到所有可执行文件/库。

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

【讨论】:

    猜你喜欢
    • 2014-04-02
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    相关资源
    最近更新 更多