我们如何创建一个软件包,以便用户在提取我们的软件tar包后可以执行典型的步骤?
$ gunzip < mycode.tar.gz | tar xvf -
$ ./configure
$ make
$ make install
我们如何创建一个软件包,以便用户在提取我们的软件tar包后可以执行典型的步骤?
$ gunzip < mycode.tar.gz | tar xvf -
$ ./configure
$ make
$ make install
Makefile
都是手写的(文件make
用作一种脚本)。当涉及到可移植性时,这变得棘手,因此编写了configure
脚本。对于每个项目,./configure
脚本也是手写的。最终由GNU使用他们的autotools
软件包自动化了这一过程。它包括autoconf
、automake
和其他几个工具。虽然有替代品存在,尤其是对于make
而言,但autotools
是最广泛使用的。至少在GNU/Linux系统上是如此。替代方案包括前面提到的CMake、Boost.Build、Boost.Jam、SCons等。自动化工具。
您需要编写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_noinst_DATA是为了构建所需的数据文件,但不会被安装。
一旦你拥有这两个文件,通常需要运行类似以下命令:
aclocal && autoheader && automake --add-missing && autoconf
来设置构建所需的autotools文件。这可以放在一个shell脚本中,在运行./configure之前运行。