set PKG_CONFIG_PATH in cmake

自古美人都是妖i 提交于 2020-01-01 08:49:53

问题


I have built opencv locally and installed it to a local directory ( not the system default ). The opencv.pc is present under a folder pkgconfig in this local folder. How can I find this opencv.pc from cmake, because I want to link and include opencv files from my program.

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

does not have any parameter in which I can force the command to use a specific path ( similiar to HINTS with find_package() ) and not the system default.

So basically .cmake works:

find_package( OpenCV REQUIRED HINTS "my/path/to/share/OpenCVConfig.cmake") 

but I would like to use a opencv.pc located under "my/path/to/pkgconfig(opencv.pc


回答1:


After doing some research and a hint from the @OlivierM, I found the answer.

Here are the steps:

Method I :

CMAKE_PREFIX_PATH can be set to find the .pc files

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

Method II A second method is to use the PKG_CONFIG_PATH, which is a system environment variable to look for .pc files.

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

Irrespective of which method you use,

Next

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

Please note that the PKG_OPENCV variable can be named anything. Whatever it is is named, its used as a prefix. For example if you name ABCD, then include directories will be ABCD_INCLUDE_DIRS

The variable PKG_OPENCV_INCLUDE_DIRS and PKG_OPENCV_LIBRARIES contains the header files ( compile stage ) and libraries ( link stage ) respectively.

One very important thing I noticed was that the variable PKG_OPENCV_LIBRARIES just provides the libraries and not the library path during the link stage. In order to use the library path as well in one command, one has to use

PKG_OPENCV_LDFLAGS 

This variable contains the library path as well as all the libraries listed in the package config file.

for exmaple:

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



回答2:


You could set PKG_CONFIG_PATH with the CMake line:

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

I did this workaround in this file

Interestingly, it seems CMake 3.1 extends PKG_CONFIG_PATH with some CMake variable see: https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=3df51470



来源:https://stackoverflow.com/questions/44487053/set-pkg-config-path-in-cmake

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!