colcon build 编译命令 是否会自动删除之前版本编译好的代码?
Question:
- colcon build 编译命令 是否会自动删除之前版本编译好的代码?
Answer(DS):
在 ROS 2 中使用 colcon build 命令时,是否会删除之前编译的代码取决于具体的使用场景和参数。以下是详细分析:
1. 默认行为(不自动删除)
- 无参数运行
colcon build
默认情况下,colcon会执行增量编译:- 保留之前编译生成的
build/、install/、log/目录中的内容 - 仅重新编译修改过的文件或依赖变更的部分
- 未修改的包会直接跳过编译(节省时间)
- 保留之前编译生成的
2. 强制清理并重新编译
如果需要完全重新编译,需显式指定参数:
(1) 清理单个包
colcon build --cmake-clean-first --packages-select <package_name>
- 效果:
- 先清理该包的
build/<package_name>目录 - 再重新编译该包
- 先清理该包的
(2) 清理所有包
colcon build --cmake-clean-first
- 效果:
- 清理所有包的
build/子目录 - 重新编译全部代码
- 清理所有包的
(3) 手动删除编译目录(彻底清理)
rm -rf build install log # 删除所有编译历史
colcon build # 全新编译
3. 关键目录说明
| 目录 | 内容 | 是否被自动删除? |
|---|---|---|
build/ | 临时编译文件(CMake缓存等) | ❌ 默认保留(增量编译) |
install/ | 安装的可执行文件和库 | ❌ 默认保留(增量更新) |
log/ | 编译日志 | ❌ 默认保留 |
4. 特殊情况处理
问题:代码修改后编译未生效?
可能原因:增量编译检测失败(如文件时间戳异常)。
解决方案:
# 方法1:强制重新编译单个包
colcon build --packages-select <package_name> --cmake-force-configure
# 方法2:手动删除该包的build目录
rm -rf build/<package_name>
colcon build --packages-select <package_name>
问题:想保留历史但确保干净编译?
colcon build --cmake-clean-first --symlink-install
5. 最佳实践建议
- 开发阶段:
- 默认用
colcon build(增量编译,节省时间) - 发现异常时添加
--cmake-clean-first
- 默认用
- 发布阶段:
rm -rf build install log # 确保完全干净 colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
总结
- 默认不删除之前编译结果(增量编译)
- 需手动清理时使用
--cmake-clean-first或删除目录 - 彻底重置编译环境建议直接删除
build/install/log目录
3444

被折叠的 条评论
为什么被折叠?



