colcon build
Tricks
Colcon build is an annoyingly long command when rapidly developing and testing. It usually looks like
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release
and if you want to build a specific package you need to add --packages-select my_pkg
or --packages-upto my_pkg
.
This page demonstrates some methods to make life easier.
Don’t forget to source install/setup.bash
after running these commands as appropriate.
Direct Method
After building the package with the command above, simply
cd build/my_pkg
make
which should rebuild my_pkg
. This may not properly handle python
packages, so be careful. It will rerun cmake
if there are changes in the CMakeLists.txt
like a normal make
command.
In general, this is the fastest method, since it directly invokes make
. We have seen that for single file changes in particular this can be much faster than colcon build ...
or the methods listed below. But as I said above it might not be best.
Using a Makefile
:
Create the file colcon_ws/Makefile
:
mode=RelWithDebInfo
.SILENT: build clean test
.PHONY: build clean test
build:
if [ -z "$(pkg)" ]; then \
echo "building all"; \
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=$(mode); \
else \
echo "building $(pkg)"; \
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=$(mode) --packages-select $(pkg);\
fi
clean:
if [ -z "$(pkg)" ]; then \
echo "cleaning all"; \
rm -r build install; \
else \
echo "cleaning $(pkg)"; \
rm -r build/$(pkg) install/$(pkg); \
fi
test: all
if [ -z "$(pkg)" ]; then \
echo "specify the pkg to test"; \
else \
echo "testing $(pkg)"; \
colcon test --packages-select $(pkg);\
colcon test-result --verbose; \
fi
(be careful with leading/trailing tabs/spaces)
To use this, from colcon_ws
, simply run
make
to build all pacakges, or
pkg=my_pkg make
to build only my_pkg
.
You can also:
make clean
to remove the build and install folders or
pkg=my_pkg make clean
to remove the build and install folders of my_pkg
.
To run the tests, (see unit-testing),
pkg=my_pkg make test
Using a bash
script:
Create the file colcon_ws/build.sh
:
#!/bin/bash
mode=Release
if [ "$#" -eq 0 ]; then
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=${mode}
else
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=${mode} --packages-select $@
fi
To use this, from colcon_ws
, simply run
./build.sh
to build all packages, or
./build.sh my_pkg
to build only my_pkg
. You can also make it build multiple packages:
./build.sh my_pkg1 my_pkg2 my_pkg3