linux - 使用 cmake 或 gcc 在 linux 上创建一个随时可用的安装包,包括切碎依赖项

标签 linux gcc cmake

我已经完成了一个使用多个库的小项目。 CMakeList.txt 看起来像这样:

cmake_minimum_required(VERSION 3.5)
project(tf_ct_log C)
set(CMAKE_C_STANDARD 99)
include_directories(include /usr/local/include/hiredis /usr/include/openssl)
link_directories(/usr/lib/x86_64-linux-gnu)
set(HDR include/ct_logger.h)
add_executable(tf_ct_logger src/main.c src/ct_logger.c ${HDR})
find_package(OpenSSL REQUIRED)
find_package(Threads REQUIRED)
find_library(PostgreSQL  REQUIRED)
find_library(jansson REQUIRED)
target_link_libraries(tf_ct_logger OpenSSL::SSL jansson pthread pq)

我希望能够构建一个可以安装在另一台机器上的包,而无需下载任何依赖项。使用 ldd,我获得了应用程序的所有依赖项并将这些文件 (libxyz.so...) 复制到子目录 deps 中我的项目。我如何使用这些依赖项创建该包,以便最终用户只需使用我的项目的目标文件以及依赖项库来创建可执行文件?

最佳答案

当您需要为多种安装程序(Debian、RH、Arch 等)创建 native 包时,尤其是在涉及自定义的情况下,这真的很麻烦。

如果您只需要一个干净的可复制品来将它放在一个盒子上并运行——我强烈建议您将其包装为 Docker容器。

您从一些轻量级 Linux 发行版容器(Alpine 是最新趋势)开始,将其派生为具有 C 和 C++ 运行时以及您所依赖的任何其他内容的容器,并将其称为“我的产品容器”。从中您派生了一个安装了 C++ 编译器和调试器的容器,并将其称为“我的开发容器”。

我们实际上写了一个little memo不久前,同时让我们的开源爱好对其他人有用。

您可能仍需要清理您的 CMake 文件,使“安装”目标能够正常工作(我的是 here )。

关于linux - 使用 cmake 或 gcc 在 linux 上创建一个随时可用的安装包,包括切碎依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52256895/

相关文章:

linux - 在远程 Linux 机器上编译 C++ - "clock skew detected"警告

linux - 如何找到工作副本和任意版本之间的 svn 差异?

c - arm-gcc Unresolved 引用 'sinf'

opencv - 加载共享库时出错 : libcudart. 所以

c++ - 使用 Mingw-w64 编译谷歌测试

linux - 让plink ssh在目标机器上使用密码在后台执行命令

c++ - 在 Linux 中制作程序,OpenGL、Wayland 和 Qt 如何融入画面

c++ - 如何使 C++(共享)库与 clang 和 GCC 兼容?

c++ - 未使用的变量警告与自动变量不同

c++ - gcov 没有生成所有 gcda 文件