发布 C++ 项目可执行文件的简洁方法

A neat way to release C++ project executable

我正在使用 CLion、cmake 在 Ubuntu 中使用 C++ 编写一个简单的程序。

该程序使用了 CURL、Qt 和 OpenCV 库,所以我使用 apt 安装了预编译包。

我写完我的代码,上传到github,现在我想将当前代码定义为版本1并发布。

我最初的想法是:将程序构建为单个可执行文件并将其作为发布共享。

但是简单的复制可执行文件,cmake的构建结果,在其他系统上好像不行;由于图书馆问题。

例如,我将可执行文件复制到新安装的干净ubuntu系统中,执行时出现共享库错误,与libcurl一样。

有没有什么巧妙的方法来发布我的程序,让用户可以下载并执行它?

谢谢!

如果您想为 Linux 发布可执行文件,您可能会承担大量工作。不仅 Linux 不同的发行版处理打包和依赖管理的方式不同,甚至在同一发行版的不同版本中也可能存在不一致。

除非您有一组人与您一起工作,或者您有时间,否则支持一个发行版都非常困难。每次发布新版本,即使是次要版本,您都必须重新构建、重新测试和重新打包。

大多数 Linux 发行版都有简化打包的工具,并且可以生成带有嵌入式依赖信息的包,这让用户的生活更轻松。但是您仍然面临着持续的维护负担。

或者,您可以采用某些大型 Linux 项目采用的方法,并发布 statically-linked 二进制文件。这通常会产生大量的可执行文件,而且它仍然不是万无一失的。

如果您的应用程序有任何好处,并且它是具有合理许可证的开源软件,并且可以从 GitHub 这样的 well-known 地方轻松获得,它可能会被分发维护者采用。构建一个发行版需要大量的编译和打包,其中大部分是自动化的。所以添加额外的包,如果它们构建干净,对于发行版维护者来说并不是一个大麻烦。

否则,我认为您最好的选择就是发布源代码,并记录其依赖项。理想情况下,如果缺少依赖项,构建将完全失败并发出明确的警告——遗憾的是,许多 Linux 应用程序(包括我自己的)都达不到这个目标。