使用PKG-CONFIG 链接OpenCV的一个例子
测试平台:Linux,MacOS
Windows上需要Cygwin或是msys2,powershell/cmd可能不行,后续会附上一种比较通用的方式:即CMake更新到3.0之后的版本可用的面向target编程。
- 最低版本需求
cmake_minimum_required(VERSION 3.0.0)
- 设置工程名称
project(main)
- 设置编译器为g++
set(CMAKE_CXX_COMPILE "g++")
- 提供编译器参数
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} -O0 -Wall -g ")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} -O3 -Wall") # Release
# 提示编译信息
message(STATUS "当前编译模式:" ${CMAKE_BUILD_TYPE} "(默认模式:Debug)")
message(STATUS "可在\"-DCMAKE_BUILD_TYPE=\"后面输入编译模式(Debug/Release)")
# 举例:搜索Python库,如果工程采用与Python混合编译则需要
# 请安装Python-dev
find_package(Python3 REQUIRED)
- 寻找pkg-config,其实是找到与之相关的.cmake文件
find_package(PkgConfig REQUIRED)
- 利用pkg-config寻找opencv4.pc这个文件。OpenCV 4之前的版本只需要输入opencv即可(opencv.pc)
pkg_check_modules(OPENCV REQUIRED opencv4)
- 链接头文件,打印头文件信息
include_directories(./include) #包含当前目录下的include。
include_directories(${OPENCV_INCLUDE_DIRS}) #OpenCV的头文件
MESSAGE(STATUS "找到OpenCV头文件目录:" ${OPENCV_INCLUDE_DIRS}) # 打印找到的头文件位置
- 链接库文件
link_libraries(${OPENCV_LIBRARIES})
MESSAGE(STATUS "找到OpenCV库文件:" ${OPENCV_LIBRARIES})
- 设置源文件目录
aux_source_directory(./src DIR_SRCS)
- 生成可执行文件
add_executable(main ${DIR_SRCS})
-
这里做一个说明,不是所有的头文件和库文件都可以用
find_package()
来找,部分软件源码中可能没.cmake
文件存在;有些软件可能有.pc
的文件存在,则可以使用pkg-config,参见以下使用pkg-config
寻找OpenCV的例子: -
说明:往往一些源码库功能或模块(例如OpenCV)很多,但是实际开发用不到那么多功能可以使用cmake图形化界面指定要编译的模块(部件),生成库文件。此时可以使用
pkg-config
(如果有.pc文件存在)来指定编译好的头文件和链接库的位置。 -
多灵活运用
find_package()
和pkg_modules_check()
功能避免了输入很长的绝对路径,其次在有多个版本共存的情况下,如果没有在安装时进行区分,可以加入version
选项确定版本,这在工程开发中是很必要的。 -
类似的,在Windows平台上有
vcpkg
(Visual Studio)这个工具,也是非常实用的工具。
文件目录:
Myproject
│
├─include
│ ├─Header1.hpp
│ └─Header2.hpp
├─src
│ ├─source1.cpp
│ ├─source2.cpp
│ └─main.cpp
└──CMakeLists.txt
![](https://img.haomeiwen.com/i18791684/0dcd5234e3880226.png)
网友评论