dar*_*lue 13 c++ deployment boost packaging
我编写了一个简单的c ++程序,它使用boost,我希望在具有任何linux风格(暂时)的相同架构的机器上部署,可能安装或不安装某些增强版本.我是部署新手但尝试阅读文档并想出一个CMakeLists.txt,它看起来像:
cmake_minimum_required(VERSION 2.8)
project( myprog )
FIND_PACKAGE( Boost 1.50 COMPONENTS thread system chrono program_options REQUIRED )
INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIR} )
add_executable( myprog myprog.cpp )
target_link_libraries( myprog -lpthread -lboost_system -lboost_chrono -lboost_program_options )
INSTALL( TARGETS myprog DESTINATION . )
SET( CPACK_GENERATOR "TGZ")
INCLUDE( CPack )
Run Code Online (Sandbox Code Playgroud)
所有编译和运行都很好,但打包(make package)只包装可执行文件而不是依赖的boost库".so"
当我运行:ldd myprog它告诉我它取决于:linux-vdso.so,libpthread.so,libboost_system.so,libboost_chrono.so,libboost_program_options.so libstdc ++.so libgcc_s.so libc.so librt.so libm.so
这些是我想要打包的共享库(也许我不需要打包标准库)
如何告诉cmake获取正确的共享对象库,并将它们放在可执行文件旁边,这样用户只需要解压缩文件夹并启动可执行文件而不进行任何安装?
静态链接不是一个选项,因为我将有一堆可执行文件将使用相同的boost库,并且可能还存在一些与libgcc静态链接的许可证问题.
在 Ubuntu 上,也许标准的打包方式是遵循 DEBIAN 规则:
不要重新分发 so 文件,而是通过在包含 CPack 之前设置 CPACK_DEBIAN_PACKAGE_DEPENDS 来指定依赖关系,看一下这个示例:
https://github.com/thomas-moulard/visp-deb/blob/master/CMakeModules/CPackConfigDeb.cmake
dpkg 会自动为您安装依赖包。
归档时间: |
|
查看次数: |
977 次 |
最近记录: |