安装colcon:sudo apt install python3-colcon-common-extensions
在执行colcon时,colcon会自动扫描当前目录及其所有子目录,寻找每个包的根目录,colcon通过检查根目录中是否存在特定的文件如CMakeLists.txt,setup.py等来识别包的类型,因此只要目录结构正确,colcon就可以正确找到
构建顺序:在构建项目时,colcon会首先生成一个包的依赖图,然后根据这个依赖图来决定包的构建顺序。一般来说,colcon会首先构建最下层(没有依赖其他包或其依赖已全部被满足)的包,然后逐层向上构建,直到所有的包都被构建完毕。
构建流程:对于每一个包,首先执行配置,然后执行编译,最后执行安装。然后才会开始处理下一个包。在编译和安装了所有依赖包之后,才会开始编译当前包。colcon在开始编译一个包之前,会确保这个包依赖的所有其他包都已经被先前正确构建和安装。因为编译一个包的过程中可能会用到其依赖包里的一些文件,所以需要先确保这些文件的存在。
构建目录
构建时会在src的同级目录下生成以下目录:
- build:中间文件存放的地方
- install:每个package安装的目录
- log:生成的log文件
colcon build
colcon build
:会构建当前目录下(包括子目录)所有的包,有以下参数:
package参数
--packages-select
:只构建特定的包,后面跟上包的名字,如:colcon build --packages-select <my_package>
--packages-skip
:使用--packages-skip
参数来跳过某些包的编译。比如你想跳过 package_a 和 package_b 的编译:colcon build --packages-skip <package_a> <package_b>
--packages-skip-regex
:通过正则表达式跳过一些包的编译,比如你要跳过所有以test_
开始的包的编译,你可以运行:colcon build --packages-skip-regex '^test_.*'
--packages-skip-from-file
:可以在一个特定的文件中列出你想跳过的包,然后用--packages-skip-from-file
参数来读取该文件,比如把要跳过的包都列在 skip.txt 文件中,可以运行:colcon build --packages-skip-from-file skip.txt
--parallel-workers <n>
:并行n个线程构建--packages-up-to
: 构建指定的包,可以指定多个包,用空格分隔。比如colcon build --packages-up-to <package1> <package2>
。--packages-up-to
参数告诉colcon build
只编译指定的包和它们的递归依赖。意思就是除了编译指定的PKG_NAME
,还会自动找出这些包所依赖的其他包进行编译,保证指定的包可以正常运行。--build-base
:指定构建的目录,默认为build--install-base
:指定安装的目录,注意设置这个值会改变cmake中CMAKE_INSTALL_PREFIX
的值--merge-install
:将所有包的安装结果合并到单一的安装目录中,而不是每个包单独的安装目录。在默认情况下,colcon build会为每个包创建单独的安装目录。如果有大量的包,这会导致有许多的安装目录。使用–merge-install可以让这些安装目录合并为一个,使得目录结构更为简洁,管理起来也更为方便。--continue-on-error
:当一个包构建失败时,继续构建其他包(递归依赖于失败的包的包将被跳过)
cmake相关参数
--cmake-args
:传递给cmake的参数,比如:--cmake-args -DCMAKE_BUILD_TYPE=Release
,用于指定cmake编译Release版本。--cmake-clean-cache
:在构建之前先删除之前的cmake cache缓存--cmake-clean-first
:以 “clean” 为首先目标调用cmake --build
。这意味着在构建之前,会先清理(删除)之前的构建结果。所以如果你在修改了代码或者依赖关系之后执行构建,这个参数会确保从干净的状态开始构建,避免了因为先前构建残留的影响而出现的问题。--cmake-force-configure
:强制CMake配置步骤。这个参数的意思是,即使在上一次构建过程中已经执行过配置步骤,也要强制重新执行CMake的配置步骤。这常常用于一些环境变量或者依赖关系发生改变需要重新配置的场合。
编译rclcpp
- 首先需要进入ros2 镜像
- 安装依赖包和工具(基本的编译工具如gcc,cmake等要提前装好)
- 报错:
eclipse-iceoryx/iceoryx/iceoryx_hoofs/platform/linux/include/iceoryx_hoofs/platform/acl.hpp:20:10: fatal error: sys/acl.h: No such file or directory
, 需要安装POSIX ACL库:apt-get install libacl1-dev
- Asio库找不到:这个是在编译Fastdds时依赖的第三方库,需要自行安装:
- 从github下拉代码:
git clone https://github.com/chriskohlhoff/asio.git -b asio-1-30-2
- 分别运行:
./autogen.sh
./configure
make
make install
- 从github下拉代码:
- 安装asio的./autogen.sh时如果报错:You need GNU autoconf to install from CVS (ftp://ftp.gnu.org/gnu/autoconf/):
第一种方式,源码安装:
- 报错:
wget ftp://ftp.gnu.org/gnu/autoconf/autoconf-latest.tar.gz
tar -xzvf autoconf-latest.tar.gz
cd autoconf-*
./configure
make
sudo make install
如果源码安装报错: checking for GNU M4 that supports accurate traces… configure: error: no acceptable m4 could be found in $PATH: 这个错误发生的原因可能是你的系统上没有安装M4或者M4的版本不对。M4是一种宏处理器,autoconf需要它来工作。sudo apt-get install m4
如果还没有解决,第二种方式:
sudo apt update
sudo apt install autoconf
- 编译:
colcon build --packages-up-to rclcpp
注意
这里的<my_package>
指的是CMakeLists.txt中project指定的名称
colcon test
colcon test
命令运行测试,可以加以下参数:
test-result --all
:获取测试结果- 查看测试的结果可以使用:
colcon test-result --verbose
-cmake-args
:向CMake传递参数