首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在cmake中设置PKG_CONFIG_PATH

在cmake中设置PKG_CONFIG_PATH
EN

Stack Overflow用户
提问于 2017-06-12 02:02:49
回答 2查看 28.1K关注 0票数 17

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

代码语言:javascript
运行
复制
pkg_search_module(<PREFIX> [REQUIRED] [QUIET] <MODULE> [<MODULE>]*)

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

因此,.cmake基本上是有效的:

代码语言:javascript
运行
复制
find_package(OpenCV REQUIRED HINTS "my/path/to/share/OpenCVConfig.cmake") 

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-12 06:05:10

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

以下是步骤:

方法I

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

代码语言:javascript
运行
复制
set(CMAKE_PREFIX_PATH "${CMAKE_SOURCE_DIR}/libs/opencv-install")

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

代码语言:javascript
运行
复制
set(ENV{PKG_CONFIG_PATH} "${CMAKE_SOURCE_DIR}/libs/opencv-install/lib/pkgconfig")

无论您使用哪种方法,

旧(传统)CMake的

代码语言:javascript
运行
复制
find_package(PkgConfig REQUIRED)
pkg_search_module(PKG_OPENCV REQUIRED opencv)  # this looks for opencv.pc file

请注意,PKG_OPENCV变量可以命名为任何名称。不管它的名字是什么,它都被用作前缀。例如,如果将包含目录命名为ABCD,则包含目录将为ABCD_INCLUDE_DIRS

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

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

代码语言:javascript
运行
复制
PKG_OPENCV_LDFLAGS 

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

例如:

代码语言:javascript
运行
复制
include_directories(${PKG_OPENCV_INCLUDE_DIRS})
target_link_libraries (FINAL_BINARY ${PKG_OPENCV_LDFLAGS})

现代CMake的

在现代的CMake中,我们不需要变量,我们需要的是目标。

代码语言:javascript
运行
复制
find_package(PkgConfig REQUIRED)
# this looks for opencv.pc file and creates a new target
# IMPORTED_TARGET requires CMake >= 3.6.3
pkg_search_module(PKG_OPENCV REQUIRED IMPORTED_TARGET opencv)

所有变量仍将被创建以实现向后兼容性,但IMPORTED_TARGET将创建一个您可以在项目中使用的目标,该目标将自动传播其所有构建和使用需求:

代码语言:javascript
运行
复制
target_link_libraries(my_proj PRIVATE PkgConfig::PKG_OPENCV) 
票数 27
EN

Stack Overflow用户

发布于 2017-06-12 02:33:57

您可以使用CMake行设置PKG_CONFIG_PATH

代码语言:javascript
运行
复制
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

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44487053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档