ros2 build_system ai_generated true

Changes to launch files or config not reflected after rebuild with colcon --symlink-install

ID: ros2/colcon-symlink-install-stale-launch

Also available as: JSON · Markdown
85%Fix Rate
88%Confidence
3Evidence
2023-01-01First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
any active

Root Cause

--symlink-install creates symlinks for Python files and launch files but NOT for compiled C++ artifacts or generated files. Also, newly added files require a full rebuild to create the symlink. Deleted files leave stale symlinks.

generic

Workarounds

  1. 92% success Run 'colcon build --packages-select <pkg>' after adding new files
    colcon build --symlink-install --packages-select my_package  # rebuilds only the affected package
  2. 90% success Source install/setup.bash after every rebuild
    source install/setup.bash  # re-source after rebuild to pick up new packages and files
  3. 88% success For C++ changes, always run colcon build (symlink-install doesn't help for compiled code)
    colcon build --packages-select my_cpp_pkg --cmake-args -DCMAKE_BUILD_TYPE=Release

Dead Ends

Common approaches that don't work:

  1. Use --symlink-install and expect all file changes to be reflected automatically 85% fail

    Only existing Python/launch files are symlinked. New files, CMakeLists.txt changes, and generated files require colcon build to update.

  2. Delete install/ directory and rebuild to fix stale symlinks 72% fail

    Works but is slow. You also need to delete build/ for some cases. A targeted rebuild of the affected package is faster.