如何从CPack构建的Deb包中移除Catkin生成的冗余文件?
解决Catkin/CPack生成Deb包时包含冗余ROS文件的问题
我懂你遇到的麻烦——Catkin在构建过程中自动生成的那些setup配置文件,莫名其妙就被CPack打包进Deb包了,完全是多余的。下面给你几个实用的解决办法,按推荐程度排序:
方法1:用CPack排除规则精准过滤文件
这是最直接的方案,直接告诉CPack打包时忽略这些特定文件。在你的CMakeLists.txt里添加以下配置:
# 定义需要排除的冗余ROS文件列表 set(EXCLUDED_ROS_FILES ".catkin" "local/.rosinstall" "local/env.sh" "local/setup.sh" "local/setup.bash" "local/setup.zsh" "local/_setup_util.py" ) # 将这些文件路径添加到CPack的自动文件列表排除项中 foreach(file ${EXCLUDED_ROS_FILES}) list(APPEND CPACK_DEBIAN_PACKAGE_EXCLUDE_FROM_AUTO_FILELIST "${CMAKE_INSTALL_PREFIX}/${file}") endforeach() # 保留你原有的CPack配置 set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Maintainer") set(CPACK_GENERATOR "DEB")
这个配置会让CPack在生成Deb包时自动跳过这些文件,不会把它们包含进去。
方法2:安装后删除冗余文件
如果方法1没生效,你可以在安装完成后直接从安装目录删除这些文件,这样CPack打包时自然就看不到它们了:
# 在安装步骤完成后删除冗余文件 install(CODE " file(REMOVE_RECURSE \${CMAKE_INSTALL_PREFIX}/.catkin \${CMAKE_INSTALL_PREFIX}/local/.rosinstall \${CMAKE_INSTALL_PREFIX}/local/env.sh \${CMAKE_INSTALL_PREFIX}/local/setup.sh \${CMAKE_INSTALL_PREFIX}/local/setup.bash \${CMAKE_INSTALL_PREFIX}/local/setup.zsh \${CMAKE_INSTALL_PREFIX}/local/_setup_util.py ) ") # 你的原有安装和CPack配置 install(TARGETS ${PROJECT_NAME}_node DESTINATION bin) install(FILES doc/${PROJECT_NAME}.yaml DESTINATION share) install(FILES doc/${PROJECT_NAME}.service DESTINATION lib/systemd/system) set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Maintainer") set(CPACK_GENERATOR "DEB")
注意这里用\${CMAKE_INSTALL_PREFIX}转义变量,确保在安装阶段能正确解析路径。
方法3:禁止Catkin生成setup文件(谨慎使用)
如果你完全不需要这些setup文件在开发环境中生效,可以直接让Catkin不要生成它们,但这个选项可能会影响你本地的开发流程,所以只在确定不需要时使用:
# 禁止Catkin生成任何setup相关文件 set(CATKIN_NO_SETUP_FILES ON) # 你的原有配置...
这个变量会让Catkin跳过所有setup脚本和配置文件的生成,从根源上避免它们被打包。
测试前建议先清理Catkin工作区(catkin clean),再重新构建打包,确保配置生效。
内容的提问来源于stack exchange,提问作者David Kristiansen
相关产品推荐
相关产品推荐

