在cmake中设置PKG_CONFIG_PATH

时间:2017-06-11 18:02:49

标签: cmake pkg-config

我已在本地构建opencv并将其安装到本地目录(不是系统默认值)。 opencv.pc位于此本地文件夹中的文件夹pkgconfig下。如何从cmake中找到这个opencv.pc,因为我想链接并包含我程序中的opencv文件。

<script type="text/ng-template" id="nodes_renderer.html">
  <div ui-tree-handle class="tree-node tree-node-content">
    <a class="btn btn-success btn-xs" data-nodrag ng-click="toggle(this)">
      <span class="glyphicon"
            ng-class="{'glyphicon-chevron-right': collapsed, 'glyphicon-chevron-down': !collapsed}">
      </span>
    </a>
    $$node.title$$
    <input type="text" name="r" value="">
</div>
</script>

没有任何参数可以强制命令使用特定路径(类似于HINTS与find_package())而不是系统默认值。

所以基本上.cmake有效:

pkg_search_module(<PREFIX> [REQUIRED] [QUIET] <MODULE> [<MODULE>]*)

但我想使用位于“my / path / to / pkgconfig”下的opencv.pc(opencv.pc

2 个答案:

答案 0 :(得分:11)

在做了一些研究和@OlivierM的提示之后,我找到了答案。

以下是步骤:

方法I

可以设置CMAKE_PREFIX_PATH来查找.pc文件

set(CMAKE_PREFIX_PATH "${CMAKE_SOURCE_DIR}/libs/opencv-install/lib/pkgconfig")

方法II 第二种方法是使用PKG_CONFIG_PATH,它是一个系统环境变量来查找.pc文件。

set(ENV{PKG_CONFIG_PATH}  "${CMAKE_SOURCE_DIR}/libs/opencv-install/lib/pkgconfig")

无论您使用哪种方法,

下一步

find_package(PkgConfig REQUIRED)
pkg_search_module(PKG_OPENCV REQUIRED opencv)  # this looks for opencv.pc file

请注意,PKG_OPENCV变量可以命名为任何名称。无论它被命名,它都被用作前缀。例如,如果您命名ABCD,则include目录将为ABCD_INCLUDE_DIRS

变量PKG_OPENCV_INCLUDE_DIRS和PKG_OPENCV_LIBRARIES分别包含头文件(编译阶段)和库(链接阶段)。

我注意到的一件非常重要的事情是变量PKG_OPENCV_LIBRARIES在链接阶段只提供库而不是库路径。为了在一个命令中使用库路径,必须使用

PKG_OPENCV_LDFLAGS 

此变量包含库路径以及程序包配置文件中列出的所有库。

例如:

include_directories(${PKG_OPENCV_INCLUDE_DIRS})
target_link_libraries (FINAL_BINARY ${PKG_OPENCV_LDFLAGS})

答案 1 :(得分:4)

您可以使用CMake行设置PKG_CONFIG_PATH

set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:/my/path/to/pkgconfig")

我在这个file

中做了这个解决方法

有趣的是,似乎CMake 3.1使用一些CMake变量扩展PKG_CONFIG_PATH,请参阅:https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=3df51470