我们如何创建一个软件包,以便在解压我们的软件 tar 球后,用户可以执行典型的步骤?
$ gunzip < mycode.tar.gz | tar xvf -
$ ./configure
$ make
$ make install
我们如何创建一个软件包,以便在解压我们的软件 tar 球后,用户可以执行典型的步骤?
$ gunzip < mycode.tar.gz | tar xvf -
$ ./configure
$ make
$ make install
查看 GNU autoconf/automake 工具链。这是一个免费的教程/书。
在过去,这个过程是手工完成的。每个Makefile
都是手工编写的(文件make
用作一种脚本)。当涉及到可移植性时,这变得有问题,因此编写了configure
脚本。./configure
脚本也是为每个项目手工编写的。最终,这由 GNU 用他们的autotools
包自动完成。这包括autoconf
,automake
和其他一些。虽然存在替代品,特别是对于make
,autotools
但使用最广泛。...至少在 GNU/Linux 系统上。替代方案包括已经提到的CMake、Boost.Build、Boost.Jam、SCons等。
使用 autotools 创建配置脚本(它将生成最后两个步骤所需的 Makefile),然后制作一个包含所有代码和内容的 tarball。
自动工具。
您需要编写一个 configure.ac 和一个 Makefile.am 脚本。
Configure.ac 非常简单,可以通过在源代码上运行“自动扫描”来自动生成。这将生成一个“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 之前运行。