使用PKG-CONFIG 鏈接OpenCV的一個(gè)例子
測試平臺:Linux,MacOS
Windows上需要Cygwin或是msys2,powershell/cmd可能不行,后續(xù)會附上一種比較通用的方式:即CMake更新到3.0之后的版本可用的面向target編程。
- 最低版本需求
cmake_minimum_required(VERSION 3.0.0)
- 設(shè)置工程名稱
project(main)
- 設(shè)置編譯器為g++
set(CMAKE_CXX_COMPILE "g++")
- 提供編譯器參數(shù)
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 "當(dāng)前編譯模式:" ${CMAKE_BUILD_TYPE} "(默認(rèn)模式:Debug)")
message(STATUS "可在\"-DCMAKE_BUILD_TYPE=\"后面輸入編譯模式(Debug/Release)")
# 舉例:搜索Python庫,如果工程采用與Python混合編譯則需要
# 請安裝Python-dev
find_package(Python3 REQUIRED)
- 尋找pkg-config,其實(shí)是找到與之相關(guān)的.cmake文件
find_package(PkgConfig REQUIRED)
- 利用pkg-config尋找opencv4.pc這個(gè)文件。OpenCV 4之前的版本只需要輸入opencv即可(opencv.pc)
pkg_check_modules(OPENCV REQUIRED opencv4)
- 鏈接頭文件,打印頭文件信息
include_directories(./include) #包含當(dāng)前目錄下的include。
include_directories(${OPENCV_INCLUDE_DIRS}) #OpenCV的頭文件
MESSAGE(STATUS "找到OpenCV頭文件目錄:" ${OPENCV_INCLUDE_DIRS}) # 打印找到的頭文件位置
- 鏈接庫文件
link_libraries(${OPENCV_LIBRARIES})
MESSAGE(STATUS "找到OpenCV庫文件:" ${OPENCV_LIBRARIES})
- 設(shè)置源文件目錄
aux_source_directory(./src DIR_SRCS)
- 生成可執(zhí)行文件
add_executable(main ${DIR_SRCS})
這里做一個(gè)說明,不是所有的頭文件和庫文件都可以用
find_package()來找,部分軟件源碼中可能沒.cmake文件存在;有些軟件可能有.pc的文件存在,則可以使用pkg-config,參見以下使用pkg-config尋找OpenCV的例子:說明:往往一些源碼庫功能或模塊(例如OpenCV)很多,但是實(shí)際開發(fā)用不到那么多功能可以使用cmake圖形化界面指定要編譯的模塊(部件),生成庫文件。此時(shí)可以使用
pkg-config(如果有.pc文件存在)來指定編譯好的頭文件和鏈接庫的位置。多靈活運(yùn)用
find_package()和pkg_modules_check()功能避免了輸入很長的絕對路徑,其次在有多個(gè)版本共存的情況下,如果沒有在安裝時(shí)進(jìn)行區(qū)分,可以加入version選項(xiàng)確定版本,這在工程開發(fā)中是很必要的。類似的,在Windows平臺上有
vcpkg(Visual Studio)這個(gè)工具,也是非常實(shí)用的工具。
文件目錄:
Myproject
│
├─include
│ ├─Header1.hpp
│ └─Header2.hpp
├─src
│ ├─source1.cpp
│ ├─source2.cpp
│ └─main.cpp
└──CMakeLists.txt

文件目錄