Проведя небольшое исследование и подсказку от @OlivierM, я нашел ответ.
Вот шаги:
Метод I:
CMAKE_PREFIX_PATH
можно настроить для поиска .pc
файлов
set(CMAKE_PREFIX_PATH "${CMAKE_SOURCE_DIR}/libs/opencv-install")
Метод II Второй метод заключается в использовании PKG_CONFIG_PATH
, переменной системной среды, для поиска .pc
файлов.
set(ENV{PKG_CONFIG_PATH} "${CMAKE_SOURCE_DIR}/libs/opencv-install/lib/pkgconfig")
Независимо от того, какой метод вы используете,
Для старого (традиционного) CMake:
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_DIRS
и PKG_OPENCV_LIBRARIES
содержит файлы заголовков (этап компиляции) и библиотеки (этап компоновки) соответственно.
Одна очень важная вещь, которую я заметил, заключалась в том, что переменная PKG_OPENCV_LIBRARIES
просто предоставляет библиотеки, а не путь к библиотеке на этапе компоновки. Чтобы использовать путь к библиотеке в одной команде, нужно использовать
PKG_OPENCV_LDFLAGS
Эта переменная содержит путь к библиотеке, а также все библиотеки, перечисленные в файле конфигурации пакета.
например:
include_directories(${PKG_OPENCV_INCLUDE_DIRS})
target_link_libraries (FINAL_BINARY ${PKG_OPENCV_LDFLAGS})
Для современного CMake:
В современном CMake нам не нужны переменные, нам нужны цели.
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
создаст цель, которую вы можете использовать в своем проекте, которая автоматически распространит все свои требования к сборке и использованию:
target_link_libraries(my_proj PRIVATE PkgConfig::PKG_OPENCV)
person
infoclogged
schedule
11.06.2017