ros版本: Ubuntu18.04 Melodic
之前在调试ros工作空间环境变量的问题的时候修改了工作空间src文件夹下的CMakeLists.txt
以进行打印消息分析出错的原因。
在我新建另外一个工作空间,执行catkin_make的过程中,同样打印了之前在修改后的CMakeLists.txt
添加的打印消息。而CMakeLists.txt
是由命令catkin_init_workspace
生成的,因此特地对catkin_init_workspace的工作过程进行简单的分析。
catkin_init_workspace位置
首先要找到catkin_init_workspace
的位置,通过以下命令:
$ which catkin_init_workspace
发现位于/opt/ros/melodic/bin/catkin_init_workspace
,打开后发现catkin_init_workspace
是python代码文件,使用gedit打开进行查看
catkin_init_workspace源码分析
打开catkin_init_workspace源码分析后发现,关键的代码为
try:
init_workspace(workspace)
通过print后发现,输入的参数workspace就是运行catkin_init_workspace
的路径,即工作空间src文件夹的路径。
而init_workspace函数由以下语句导入:
from catkin.init_workspace import init_workspace
我们通过find命令搜索一下包含init_workspace的文件,筛选出上级目录名称是catkin的文件。
$ sudo find / -name init_workspace*
在输出结果中找到了/opt/ros/melodic/lib/python2.7/dist-packages/catkin/init_workspace.py
,这个应该就是我们想要找到的文件
使用gedit打开init_workspace.py
,在这个文件中我们可以找到init_workspace
函数,分析这个函数可以发现,关键的代码在最后一行:
_symlink_or_copy(src_file_path, dst)
通过print函数打印可以发现
src_file_path = /opt/ros/melodic/share/catkin/cmake/toplevel.cmake
dst = workspace/CMakeLists.txt #workspace为工作空间src文件夹路径
_symlink_or_copy
函数(init_workspace.py 第42行)的代码为(仅关键代码):
def _symlink_or_copy(src, dst):
try:
os.symlink(src,dst)
...
所以_symlink_or_copy
是创建dst作为src的软链接(在windows中相当于快捷方式)。
结论
综上所述,在工作空间src文件夹中执行catkin_init_worksapce
进行工作空间初始化时,会在src文件夹下创建一个名为CMakeLists.txt
的指向/opt/ros/melodic/share/catkin/cmake/toplevel.cmake
的软链接,因此,打开CMakeLists.txt
时,实际上相当于打开了toplevel.cmake
,此时对它进行修改的话,所有工作空间由catkin_init_worksapce
创建的CMakeList.txt
都会受到影响。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)