cmake 入门(1)

2.正文

2.1 模板

#cmake 版本检查
cmake_minimum_required (VERSION 2.8)

#项目名字
project (greenReplace)

#设置c++版本
set(CMAKE_CXX_STANDARD 17)
set(OpenCV_DIR /root/download/opencv-master/build/)

#开启debug
set(CMAKE_BUILD_TYPE "Debug")
#release
#SET(CMAKE_BUILD_TYPE "Release")

#寻找openCV
find_package( OpenCV REQUIRED ) //通过OpenCV.cmake完成

#设置头文件路径 -I
include_directories("/usr/include")
include_directories( ${OpenCV_INCLUDE_DIRS} )
include_directories("/usr/local/include/opencv4")

#设置要动态连接库的目录
link_directories("/usr/lib") 

#将当前目录下所有.c cpp .h .hpp 文件放入  SRC变量中
aux_source_directory(. SOURCES_FILES)

#将所有源文件编译成greenReplace
add_executable(greenReplace ${SOURCES_FILES})


#链接
target_link_libraries(greenReplace ${OpenCV_LIBS})

target_link_libraries是用来把一个tagert(add_executable或add_library的产物)做链接库的,如下使用:

target_link_libraries(test libwebsockets.so libjansson.so)

和两种下面的方式等效

target_link_libraries(test -lwebsockets -ljansson)
target_link_libraries(test websockets jansson)

如果想要使用静态库的话,需要显示声明

target_link_libraries(test libwebsockets.a libjansson.a)

注意: 链接pthread的时候,应该直接使用 pthread(g++/gcc 对于该选项除了link 会添加一些宏)而不是-lpthread

//等效于-ptherad
target_link_libraries(test pthread)

2.3 find_package的细节

通过调用find_package可以找到头文件和所需要的库文件或者是一个CMake打包配置文件

find_package(OpenCV
  [version] [EXACT]      # 可选项,最小版本或者确切所需版本
  [REQUIRED]             # 可选项,如果找不到所需库,报错
  [COMPONENTS <libs>...] # 所需的库名称,比如说. "date_time" 代表 "libboost_date_time"
  )     

运行完后可以得到很多变量,下面列了一些主要的

OpenCV_FOUND            - 如果找到了所需的库就设为true
OpenCV_INCLUDE_DIRS     - OpenCV头文件搜索路径
OpenCV_LIBRARY_DIRS     - OpenCV库的链接路径
OpenCV_LIBRARIES        - OpenCV库名,用于链接到目标程序
OpenCV_VERSION          - 版本号
OpenCV_LIB_VERSION      - 某个库的版本

find_package()得原理是/usr/local/share/cmake-xxx/Modules去找一个对应的库的脚本文件,这个脚本文件去搜索对应的头文件和库,并设置一下变量出来使用

官方说明中,link_directories 要放在add_executable或add_libraries前,否则会导致ld cannot find的错误

2.5 常用宏定义

-DCMAKE_INSTALL_PREFIX 安装目录
-DCMAKE_BUILD_TYPE=[DEBUG | RELEASE] debug或发布版

3.ref

3.1 官方guide
3.2 cmake 添加头文件目录,链接动态、静态库
3.2 find_package,寻找boost的实例
3.3 cmake 命令速查
3.3 Cmake之深入理解find_package()的用法

posted @ 2020-07-06 21:32  woder  阅读(310)  评论(0编辑  收藏  举报