在做了一些研究和@OlivierM 的提示后,我找到了答案。
步骤如下:
方法一:
CMAKE_PREFIX_PATH可以设置查找.pc文件
set(CMAKE_PREFIX_PATH "${CMAKE_SOURCE_DIR}/libs/opencv-install")
方法二
第二种方法是使用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)