1.前言
我对Cmake的理解:它也是一种变量和指令组成的编程语言,它描述了文件构建过程的程序。
2. 语言层面
2.1 常用变量
2.2 常用指令
3.常见用法
3.1 添加外部共享库和头文件时
3.1.1 场景解释
当我们使用一些如opencv,pcl等外部库的时候,编译时常常需要添加外部库的共享库和外部头文件,一般有三个步骤:
(1)添加头文件目录
(2)添加库文件目录
(3)为编译目标添加编译时需要的库文件名
与此对应了三条指令:
(1)include_directories() :添加头文件位置
(2)link_directories() :一般情况不需要添加,除非你自己写的动态库或者静态库不在系统的库链接里面
(3)target_link_libraries():为target添加需要链接的共享库
另外有一个小知识点:
#include< > 引用的是编译器的类库路径里面的头文件。
#include" " 引用的是你程序目录的相对路径中的头文件。
3.1.2 代码展示
# opencv
include_directories( ${OpenCV_INCLUDE_DIRS} )
# eigen
include_directories( "/usr/include/eigen3/" )
link_directories("/xxx/xxx/xxx")
target_link_libraries( target ${OpenCV_LIBS} ${PCL_LIBRARIES} )
3.2 生成静态库,动态库和可执行文件时
3.2.1 场景解释
我们写代码最后所做一切工作最后不就是生成三类文件:
(1)静态库
(2)动态库
(3)可执行文件
与此对应了两条指令:
add_library( libname [SHARED | STATIC | MODULE] source) 根据参数不同可以生成不同类型的库。
add_executable( target source ) 生成可执行文件
3.2.2 代码展示
# 添加一个库
add_library( hello libHelloSLAM.cpp )
# 共享库
add_library( hello_shared SHARED libHelloSLAM.cpp )
# 可执行文件
add_executable( useHello useHello.cpp )
4. 小结
参考文献:
1. http://www.hahack.com/codes/cmake/
2.https://github.com/TheErk/CMake-tutorial