如何用ROS Bloom生成C++库的运行时与开发Deb包?
问题
我实现了一个具备若干功能的C++库,通过以下命令编译并安装后,其他包可找到并调用该库:
mkdir build cmake .. make
sudo make install
我希望为该库创建Debian包,使用ROS Bloom工具执行以下命令时仅生成单个二进制包:
bloom-generate debian --os-name ubuntu --os-version jammy fakeroot debian/rules binary
但我需要拆分出两个包:一个用于运行时库,供非开发用户使用;另一个包含头文件、CMake等开发工具,供开发者使用。请问是否可通过ROS Bloom实现此需求?我希望继续使用Bloom以简化运行时与编译时依赖管理。
解决方案
完全可以通过ROS Bloom实现这个需求,具体步骤如下:
调整CMakeLists.txt的安装规则
确保你的CMake脚本将运行时文件和开发文件分开安装:- 对于共享库,指定运行时安装路径:
install(TARGETS your_library LIBRARY DESTINATION lib ARCHIVE DESTINATION lib RUNTIME DESTINATION bin ) - 单独安装头文件到标准开发目录:
install(DIRECTORY include/your_library DESTINATION include ) - 安装CMake配置文件到开发包专属的cmake目录:
install(FILES cmake/YourLibraryConfig.cmake DESTINATION lib/cmake/your_library )
- 对于共享库,指定运行时安装路径:
使用Bloom的拆分参数生成Debian配置
在执行bloom-generate时添加--split-debs参数,这个参数会自动触发运行时包和开发包的拆分:bloom-generate debian --os-name ubuntu --os-version jammy --split-debs编译生成拆分后的包
继续执行二进制包编译命令:fakeroot debian/rules binary执行完成后,你会得到两个
.deb文件:your-library-name:包含运行时共享库,供非开发用户安装使用;your-library-name-dev:包含头文件、CMake配置文件等开发必需资源,供开发者使用。
验证包内容
可以用dpkg -c命令检查包内的文件结构,确认拆分是否符合预期:dpkg -c your-library-name_*.deb # 查看运行时包内容 dpkg -c your-library-name-dev_*.deb # 查看开发包内容
内容的提问来源于stack exchange,提问作者apalomer
相关产品推荐
相关产品推荐

