Я написал простую программу на c ++, использующую boost, которую я хочу развернуть на машинах с той же архитектурой, с любым вкусом linux (на данный момент), в котором могут быть установлены или не установлены некоторые версии boost.
Я новичок в развертывании, но попытался прочитать документы и придумать 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 )
Все компилируется и работает нормально, но упаковка (make package) упаковывает только исполняемый файл, а не зависимые библиотеки надстройки «.so»
Когда я бегу: ldd myprog
он говорит мне, что это зависит от: linux-vdso.so, libpthread.so, libboost_system.so, libboost_chrono.so, libboost_program_options.so libstdc ++. поэтому libgcc_s.so libc.so librt.so libm.so
Это те общие библиотеки, которые я хочу упаковать (возможно, мне не нужно запаковывать стандартные)
Как я могу сказать cmake получить правильные библиотеки общих объектов и поместить их рядом с исполняемым файлом, чтобы пользователю оставалось только распаковать папку и запустить исполняемый файл без какой-либо установки?
Статическое связывание здесь не вариант, так как у меня будет куча исполняемых файлов, которые будут использовать те же библиотеки наддува, а также могут возникнуть некоторые проблемы с лицензией при статическом связывании с libgcc.
в Ubuntu, возможно, стандартный способ упаковки — следовать правилам DEBIAN:
Вместо перераспределения файлов, укажите зависимость, установив
CPACK_DEBIAN_PACKAGE_DEPENDS, прежде чем включать CPack, посмотрите на это
пример:
https://github.com/thomas-moulard/visp-deb/blob/master/CMakeModules/CPackConfigDeb.cmake
dpkg автоматически установит зависимые пакеты.