ROS入门之CmakeList.txt详讲

        本文为进来学习的总结,记录了学习CmakeList.txt文档的各个步骤,适合从零开始理解CmakeList.txt,可能存在错误之处,望批评指正。

0 Cmake的起源

        为什么有CmakeList.txt文档,这就要从C++说起了。在完成C++的代码之后想要把程序运行起来就需要把C++转换成可执行文件,具体来说,编译分为以下四个步骤:

(1)预处理;(2)编译;(3)汇编;(4)链接。

        具体来讲,我们可以把前三部看成一个黑盒,调用相应的指令就可以帮助我们直接完成,前三步完成之后会把.c或,cpp为后缀的文件转换成了.o为后缀的文件,第四步可以理解为当我们的程序调用了别的.h或其他的.cpp文件时,需要将这些内容和我们的程序链接到一起。

        在ubuntu 系统中可以使用gcc命令来完成以上四步的操作。在windows系统的,我们所使用的IDE,例如visual studio会自动帮我们完成,就不需要我们完成以上步骤了。但使用gcc有如下几个弊端:

(1)每次修改程序过后都要重新写一遍gcc操作语句,麻烦;

(2)每次都要把所有文件全部编译一遍,费时。

        基于此,make诞生了,make是一种工具,用来调用makefile,所谓的makefile可以理解为把我们所写的gcc命令打包为一个文件,当我们使用make命令的时候,就会自动调用makefile文件,根据文件里的内容进行相应的操作。这样当我们修改了我们的程序之后,只需要一个make命令就可以完成操作了,解决了问题(1),对于问题(2),make会自动只完成你修改过的文件的操作,对于没有修改的文件则不会进行操作。

        当光有make还没有完,因为可以把make理解为一个调用makefile文件的工具,而makefile是gcc命令的合集,而gcc是运行在ubuntu平台的,如果我们在其他平台上写c++程序又该怎么办呢?

        Cmake很好的解决了以上问题。Cmake就是为了生成不同平台的makefile文件。

1 Cmake和catkin

        正如上文所说,Cmake是为了产生不同平台的makefile文件,Cmake和make一样,可以理解为一个工具,它所调用的文件就是CmakeList.txt文件,以ubuntu为例来说明一个完整的c++程序转换为可执行文件的过程,首先使用Cmake命令调用CmakeList.txt文件,进而生成了ubuntu平台的makefile文件,而后使用make命令调用makefile文件生成可执行文件。

1.1 CmakeList.txt文件的写法

        参见以下链接,很详细。

手把手教你写CMake一条龙教程

【CMake】CMakeLists.txt的超傻瓜手把手教程(附实例源码)

        建议按顺序观看和阅读。

1.2 ros中的catkin

        在ros中,我们经常看到catkin这样的字眼,实际上catkin就是针对Cmake做的适应于ros的工具,实际功能和Cmake基本差不多,只不过ros里面我们经常会用到自定义的消息、服务等文件也需要被转换为c++可以调用的.h文件,因此,catkin主要就是针对以上部分对Cmake进行了改进,我们常常用到的catkin_make命令实际上就是catkin和make命令的合称,因此catkin实际上也是调用CmakeList.txt文件,只不过这个文件中的内容是在Cmake的CmakeList.txt文件的基础之上增添了一些内容。使用catkin_make这个命令就可以直接把c++文件转换为可执行文件了。

1.3 catkin CmakeList.txt文件的写法

        主要内容和1.1中的一致,但是添加了适合于ros的东西。

        参考[ROS官方教程] catkin/CMakeLists.txt的使用

主要增加了以下几项:

(1)发现编译需要的CMake/Catkin包 (find_package())
(2)添加Message/Service/Action (add_message_files(), add_service_files(), add_action_files())
(3)生成Message/Service/Action (generate_messages())
(4)功能包编译信息导出 (catkin_package())
把以上链接按顺序看完了应该就能懂了

你可能感兴趣的:(ROS学习笔记)