установить путь конфигурации PKG в cmake

Я построил opencv локально и установил его в локальный каталог ( не системный по умолчанию ). В формате OpenCV.ПК присутствует под папкой pkgconfig в этой локальной папке. Как я могу найти этот opencv.ПК от cmake, потому что я хочу связать и включить файлы opencv из моей программы.

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

не имеет параметра, в котором я могу заставить команду использовать определенный путь ( похожий на подсказки с find_package ()), а не системный по умолчанию.

Так в основном .cmake работает:

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

но я хотел бы использовать opencv.ПК, расположенный под " my / path/to / pkgconfig(opencv.pc

2 ответов


после проведения некоторых исследований и намека от @OlivierM, я нашел ответ.

вот шаги:

Метод I :

CMAKE_PREFIX_PATH можно установить для поиска .ПК файлы

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

метод II Второй метод-использовать pkg_config_path, который является системной переменной среды для поиска .файлы ПК.

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 

эта переменная содержит путь к библиотеке, а также все библиотеки, перечисленные в файле пакета конфигурации.

для exmaple:

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

вы можете установить PKG_CONFIG_PATH с линией CMake:

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

Я сделал этот обходной путь в этом

интересно, кажется CMake 3.1 расширяет PKG_CONFIG_PATH С некоторой переменной CMake см.:https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=3df51470