我已在本地构建opencv并将其安装到本地目录(不是系统默认值).opencv.pc位于此本地文件夹中的文件夹pkgconfig下.如何从cmake中找到这个opencv.pc,因为我想链接并包含我程序中的opencv文件.
pkg_search_module(<PREFIX> [REQUIRED] [QUIET] <MODULE> [<MODULE>]*)
Run Code Online (Sandbox Code Playgroud)
没有任何参数,我可以强制命令使用特定路径(类似于HINTS与find_package())而不是系统默认值.
所以基本上.cmake工作:
find_package( OpenCV REQUIRED HINTS "my/path/to/share/OpenCVConfig.cmake")
Run Code Online (Sandbox Code Playgroud)
但我想使用位于"my/path/to/pkgconfig"下的opencv.pc(opencv.pc
inf*_*ged 14
在做了一些研究和@OlivierM的提示之后,我找到了答案.
以下是步骤:
方法一:
可以设置CMAKE_PREFIX_PATH来查找.pc文件
set(CMAKE_PREFIX_PATH "${CMAKE_SOURCE_DIR}/libs/opencv-install/lib/pkgconfig")
Run Code Online (Sandbox Code Playgroud)
方法II 第二种方法是使用PKG_CONFIG_PATH,它是一个系统环境变量来查找.pc文件.
set(ENV{PKG_CONFIG_PATH} "${CMAKE_SOURCE_DIR}/libs/opencv-install/lib/pkgconfig")
Run Code Online (Sandbox Code Playgroud)
无论您使用哪种方法,
下一个
find_package(PkgConfig REQUIRED)
pkg_search_module(PKG_OPENCV REQUIRED opencv) # this looks for opencv.pc file
Run Code Online (Sandbox Code Playgroud)
请注意,PKG_OPENCV变量可以命名为任何名称.无论它被命名,它都被用作前缀.例如,如果您命名ABCD,则include目录将为ABCD_INCLUDE_DIRS
变量PKG_OPENCV_INCLUDE_DIRS和PKG_OPENCV_LIBRARIES分别包含头文件(编译阶段)和库(链接阶段).
我注意到的一件非常重要的事情是,变量PKG_OPENCV_LIBRARIES只提供了库,而不是链接阶段的库路径.为了在一个命令中使用库路径,必须使用
PKG_OPENCV_LDFLAGS
Run Code Online (Sandbox Code Playgroud)
此变量包含库路径以及程序包配置文件中列出的所有库.
例如:
include_directories(${PKG_OPENCV_INCLUDE_DIRS})
target_link_libraries (FINAL_BINARY ${PKG_OPENCV_LDFLAGS})
Run Code Online (Sandbox Code Playgroud)