Advanced usage of colcon#
This page shows some advanced and useful usage of colcon
.
If you need more detailed information, refer to the colcon documentation.
Common mistakes#
Do not run from other than the workspace root#
It is important that you always run colcon build
from the workspace root because colcon
builds only under the current directory.
If you have mistakenly built in a wrong directory, run rm -rf build/ install/ log/
to clean the generated files.
Do not unnecessarily overlay workspaces#
colcon
overlays workspaces if you have sourced the setup.bash
of other workspaces before building a workspace.
You should take care of this especially when you have multiple workspaces.
Run echo $COLCON_PREFIX_PATH
to check whether workspaces are overlaid.
If you find some workspaces are unnecessarily overlaid, remove all built files, restart the terminal to clean environment variables, and re-build the workspace.
For more details about workspace overlaying
, refer to the ROS 2 documentation.
Cleaning up the build artifacts#
colcon
sometimes causes errors of because of the old cache.
To remove the cache and rebuild the workspace, run the following command:
rm -rf build/ install/
In case you know what packages to remove:
rm -rf {build,install}/{package_a,package_b}
Selecting packages to build#
To just build specified packages:
colcon build --packages-select <package_name1> <package_name2> ...
To build specified packages and their dependencies recursively:
colcon build --packages-up-to <package_name1> <package_name2> ...
You can also use these options for colcon test
.
Changing the optimization level#
Set DCMAKE_BUILD_TYPE
to change the optimization level.
Warning
If you specify DCMAKE_BUILD_TYPE=Debug
or no DCMAKE_BUILD_TYPE
is given for building the entire Autoware, it may be too slow to use.
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Debug
colcon build --cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
Changing the default configuration of colcon#
Create $COLCON_HOME/defaults.yaml
to change the default configuration.
mkdir -p ~/.colcon
cat << EOS > ~/.colcon/defaults.yaml
{
"build": {
"symlink-install": true
}
}
For more details, see here.
Generating compile_commands.json#
compile_commands.json is used by IDEs/tools to analyze the build dependencies and symbol relationships.
You can generate it with the flag DCMAKE_EXPORT_COMPILE_COMMANDS=1
:
colcon build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=1
Seeing compiler commands#
To see the compiler and linker invocations for a package, use VERBOSE=1
and --event-handlers console_cohesion+
:
VERBOSE=1 colcon build --packages-up-to <package_name> --event-handlers console_cohesion+
For other options, see here.
Using Ccache#
Ccache can speed up recompilation. It is recommended to use it to save your time unless you have a specific reason not to do so.
-
Install
Ccache
:sudo apt update && sudo apt install ccache
-
Write the following in your
.bashrc
:export CC="/usr/lib/ccache/gcc" export CXX="/usr/lib/ccache/g++"