0.前提
最近在学习宾夕法尼亚大学工程学院的ROS公开课,在尽力的去融入全英语的环境(哪怕我的英语水准并不是很高)。既然是在学习,笔记也就是必须的了,当然这些笔记都是课程当中提出的问题,我去寻找后得出的答案,可能并不是最准确的,请一定要认真辨别。
1. (Python & C++) What is a CMakeList? Is it related to a make file used for compiling C++ objects? If yes then what is the difference between the two?(什么是CMakeList?是否作用于c++文件的编译?python和c++文件的编译有何区别?)
1.What is a CMakeList?(什么是CMakeList?)
1.CMakeLists.txt
CMakeLists.txt用于构建软件包的 CMake 构建系统的输入。任何符合CMake 的包都包含一个或多个 CMakeLists.txt 文件,用于描述如何生成代码以及将其安装到的位置。用于 catkin 项目的 CMakeLists.txt 文件是一个标准的 CMakeLists.txt 文件,具有一些附加约束。(通俗了讲就是记录了功能包的编译规则。)
2.CMakeLists.txt 文件格式
1.CMake版本:cmake_minimum_required()
2.包名:project()
3.构建所需的其他CMake/Catkin软件包:find_package()
4.开启Python模块支持:catkin_python_setup()
5.消息/服务/操作生成器:add_message_files()、add_service_files()、add_action_files()
6.调用消息/服务/操作生成:generate_messages()
7.指定包构建信息导出 :catkin_package()
8.构建的库/可执行文件 :add_library()/add_executable()/target_link_libraries()
9.构建测试:catkin_add_gtest()
10.安装规则:install()
详情请查阅ROS官方文档(查看官方资料比网络流传更重要)catkin/CMakeLists.txt - ROS Wiki
2.Is it related to a make file used for compiling C++ objects?(是否作用于c++文件的编译?)
是的,作用于C++文件的编译。
3.If yes then what is the difference between the two?(python和c++文件的编译有何区别?)
Python代码没有使用add_library()和 add_executable()函数
2. (Python & C++) Are you using CMakeList.txt for Python in ROS? Is there a executable object being created for Python?(在ROS中对python文件会使用CMakeList.txt吗?是否为Python创建了可执行对象?)
1.Are you using CMakeList.txt for Python in ROS?(在ROS中对python文件会使用CMakeList.txt吗?)
会的,但我目前还未经历过要使用的情况(我资历太浅)。
2.Is there a executable object being created for Python?(是否为Python创建了可执行对象?)
创建了。
3. (Python & C++) In which directory would you run catkin make?(catkin_make在哪使用?)
在工作空间路径(也就是ws的位置)
4. (Python & C++) The following commands were used in the tutorial:
$ source / opt / ros / kinetic ( melodic )/ setup . bash
$ source devel / setup . bash
Why do we need to source setup.bash? What does it do? Why do we have to different setup.bash files here and what is there difference?(为什么我们要source setup.bash?如何做?为什么两者不同?不同在哪?)
设置环境变量 (source devel/setup.bash)是为了系统能够找到这个工作空间,Ubuntu默认使用的终端是bash,需要在bash中设置ros环境变量,最好把它放在家目录的.bashrc目录下,以便系统启动时能够执行其中的source /opt/ros/kinetic/setup.bash指令,使得工作空间中的环境变量可以生效,这样系统终端能够读懂ros命令,执行相应的操作。