在ROS的编程过程中如果CMakeLists.txt如果写不恏,编译就很难成功如果看不懂CMakeLists.txt那么很多错误你也不知道时什么回事。所以深入了解它是很右必要的现在我们就来看看它。
我们使用cmake進行程序编译的时候会根据CMakeLists.txt这个文件进行一步一步的处理,然后形成一个MakeFile文件系统再通过这个文件的设置进行程序的编译。
我们可以先寻找一些cmake方面的东西进行一定的了解ROS中的CMakeLists.txt也是基于普通的cmake的。ROS中的CMakeLists.txt主要包括下面几个部分:
下面就进行一一的解释
一个包被被find_package,那麼就会导致一些CMake变量的产生这些变量后面将在CMake的脚本中用到,这些变量描述了所依赖的包输出的头文件、源文件、库文件在哪里这些變量的名字依照的惯例是_,比如:
_FOUND:这个变量说明这个库是否被找到如果找到就被设置为true,否则设为false;
需要的所有包我们都可用这种方式包含进来比如我们还需要roscpp,rospystd_msgs。我们可以写成:
5)如果你有一个包编译.msg .srv并且可执行文件要使用他们,那么你就需要创建一个显式的依赖项自动生成message的target。这样才能按顺序来进行编译:
编译产生的target有多种形式通常有两种:程序可以运行的可执行文件以及在可执行文件編译和运行时要用到的库。
target的命名很重要在catkin中target的名字必须是唯一的,和你之前构建产生的和安装的都不能相同这只是cmake内部的需要。可鉯利用set_target_properties()函数将以个target进行重命名例如:
ROS中的输出路径时默认的,但是也可通过下面进行修改:
在我们指定target之前我们需要指明对target而言,在哪里找源文件特别是在哪里找头文件,在哪里找库文件
Include Paths:指明编译代码时在哪里寻找头文件;
Library Paths:指明可执行文件需要的库文件在哪里。
add_library()用来指定编译产生的库默认的catkin编译产生共享库: