我已在本地构建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
答案 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