学习pcl库时,关于CMakeLists.txt的编写
最近在学习pcl库时,运用官方的CMakeLists.txt时总是会出现各种各样的问题,于是就抽一些时间来专门学一下cmake,将自己总结的做一个简单的记录.
这里是参考的几篇写的很好的解释:
https://blog.csdn.net/u013019296/article/details/103637792.
https://blog.csdn.net/xuehuafeiwu123/article/details/53929834.
https://blog.csdn.net/bigdog_1027/article/details/79113342.
下面是自己做的总结:
-
定义最小版
cmake_minimum_required(version 2.8.3) -
项目名称
project(demo) //这里的demo为工程文件夹名称 -
依赖功能包,至少依赖一个关于catkin的功能包
find_package(catkin_REQUIRED)如果要使用c++和Boost,需要包含Boost,并且指明类型,例如使用Boost threads(多线程相关)
find_package(Boost REQUIRED COMPONENTS thread) -
catkin_package()
是catkin支持的CMake宏指令,用来向编译系统指明catkin_spesific的信息,而编译系统用来生成PKG-config和CMake files
这里需要注意的是,该函数必须放在add_library() 和 add_executable() 之前 -
include_directories()
参数形式 *_INCLUDE_DIRS,变量为 find_package路径和其他需要包含的路径
例如:include_directories(include ${catkin_INCLUDE_DIRS} -
find_package()
find_package()命令是用来查找依赖包的,可以把一整个依赖包的头文件包含路径、库路径、库名字、版本号等情况都获取到,后续只管用就好了. -
link_directories()
用来加载外加的库函数路径 -
add_excutable()
使用给定的源文件,为工程引入一个可执行文件 -
add_dependencies()
一般来说用不到。用到的情况就是两个targets有依赖关系(通过target_link_libraries解决)并且依赖库也是通过编译源码产生的。这时候一句add_dependencies可以在直接编译上层target时,自动检查下层依赖库是否已经生成。没有的话先编译下层依赖库,然后再编译上层target,最后link depend target -
target_link_libraries()
添加链接库;将目标文件与库文件进行链接.
最后给出示例的CMakeLists.txt: