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

时间:2009-02-21 13:22:36

标签: c++ unix boilerplate software-packaging

我们如何创建软件包。以便 提取我们的软件tar球用户可以做到 典型的步骤:

$ gunzip < mycode.tar.gz | tar xvf -
$ ./configure
$ make
$ make install

6 个答案:

答案 0 :(得分:7)

难以理解的GNU / Autools的另一种选择是CMake。

http://www.cmake.org/cmake/help/examples.html

e.g。 KDE正在使用它。

答案 1 :(得分:6)

查看GNU autoconf / automake工具链。 Here's a free tutorial/book.

答案 2 :(得分:3)

在过去,这个过程是手工完成的。每个Makefile都是手写的(文件make用作一种脚本)。这在可移植性方面成了问题,因此编写了configure脚本。 ./configure脚本也是为每个项目手工编写的。最终,GNU使用autotools包自动执行此操作。这包括autoconfautomake和其他一些内容。虽然存在替代方案,尤其是make,但autotools的使用最为广泛。 ......至少在GNU / Linux系统上。替代方案包括已提及的CMakeBoost.BuildBoost.JamSCons等。

答案 3 :(得分:1)

使用autotools创建配置脚本(将生成最后两步所需的Makefile),然后使用所有代码和内容制作tarball。

答案 4 :(得分:1)

rpmbuild是构建rpm包的命令

man page

tutorial

答案 5 :(得分:1)

Autotools的。

您需要编写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&amp;&amp; autoheader&amp;&amp; automake --add-missing&amp;&amp; autoconf的

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

之前运行