如何在Unix/Linux中创建软件包?

7

我们如何创建一个软件包,以便用户在提取我们的软件tar包后可以执行典型的步骤?

$ gunzip < mycode.tar.gz | tar xvf -
$ ./configure
$ make
$ make install
6个回答

7

6

可以了解一下GNU autoconf/automake工具链。这里有一个免费的教程/书籍:点击这里。


4
在早期,这个过程是手工完成的。每个Makefile都是手写的(文件make用作一种脚本)。当涉及到可移植性时,这变得棘手,因此编写了configure脚本。对于每个项目,./configure脚本也是手写的。最终由GNU使用他们的autotools软件包自动化了这一过程。它包括autoconfautomake和其他几个工具。虽然有替代品存在,尤其是对于make而言,但autotools是最广泛使用的。至少在GNU/Linux系统上是如此。替代方案包括前面提到的CMakeBoost.BuildBoost.JamSCons等。

1
使用Autotools创建configure脚本(该脚本将生成最后两个步骤所需的Makefile),然后制作一个包含所有代码和相关文件的tarball。

1

当我阅读链接的 manpage 时,似乎没有回答我认为被问到的问题:如何在第一次构建中提供一个平台灵活的构建(即帮助编写 configure 和 makefile)... rpmbuild 看起来假定你已经有了这样的东西。 - dmckee --- ex-moderator kitten

1

自动化工具。

您需要编写configure.ac和Makefile.am脚本。

Configure.ac非常简单,可以从在源代码上运行“autoscan”大部分自动生成。这将生成一个“configure.scan”文件,您需要调整它以生成最终的configure.ac文件。

Automake.am文件全部基于惯例。您可能需要类似以下内容:

AUTOMAKE_OPTIONS = foreign subdir-objects
AM_CXXFLAGS = -std=c++11 -static-libstdc++ -Wall -Werror \
    -Wfatal-errors -I blah
AM_LDFLAGS = blah

bin_PROGRAMS = mybinary
mybinary_SOURCES = \
    blah.h blah.cc

所有的内容都基于命名模式:

  • dist vs nodist = 是否应该被构建
  • inst vs noinst = 是否应该被安装
  • DATA = 数据文件
  • MANS = 手册页
  • SOURCES = 源代码

所以dist_noinst_DATA是为了构建所需的数据文件,但不会被安装。

一旦你拥有这两个文件,通常需要运行类似以下命令:

aclocal && autoheader && automake --add-missing && autoconf

来设置构建所需的autotools文件。这可以放在一个shell脚本中,在运行./configure之前运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接