【发布时间】:2009-02-21 13:22:35
【问题描述】:
我们如何创建一个软件包,以便 解压我们的软件tar球后用户可以做 典型的步骤?
$ gunzip < mycode.tar.gz | tar xvf -
$ ./configure
$ make
$ make install
【问题讨论】:
标签: c++ unix boilerplate software-packaging
我们如何创建一个软件包,以便 解压我们的软件tar球后用户可以做 典型的步骤?
$ gunzip < mycode.tar.gz | tar xvf -
$ ./configure
$ make
$ make install
【问题讨论】:
标签: c++ unix boilerplate software-packaging
【讨论】:
查看 GNU autoconf/automake 工具链。 Here's a free tutorial/book.
【讨论】:
在过去,这个过程是手工完成的。每个Makefile 都是手写的(文件make 用作一种脚本)。当涉及到可移植性时,这变得有问题,因此制作了configure 脚本。 ./configure 脚本也是为每个项目手工编写的。最终这由 GNU 用他们的autotools 包自动完成。这包括autoconf、automake 和其他一些。虽然存在替代方案,特别是对于make,但autotools 使用最广泛。 ...至少在 GNU/Linux 系统上。替代方案包括已经提到的CMake、Boost.Build、Boost.Jam、SCons 等。
【讨论】:
使用自动工具创建配置脚本(它将生成最后两个步骤所需的 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
设置构建所需的自动工具文件。这可以放在 shell 脚本中并在运行 ./configure 之前运行。
【讨论】: