2012-06-30 18 views
1

我正在尝试使用autotools为C程序创建一个构建系统。但是,在阅读info automake之后,我仍然对开发人员调用哪些工具的顺序感到困惑。自动工具调用什么命令来创建构建系统?

让我们考虑一个非常简单的hello world应用程序。在应用程序的根目录中有简单的src/hello.c,没有别的。需要以什么样的顺序调用哪些工具configureMakefile

我想我自己(部分阅读文档,部分只是尝试),autoscan先来,并生成configure.ac的“草图”。然后autoheader显然创建一个头文件(为什么?)。接下来autoconf最终会创建configure脚本,最终将创建一个config.h

但是,我仍然错过了Makefile,我相信这是由automake创建的,但这需要Makefile.am,我不知道如何生成。这个文件是完全由开发人员生成的还是手写的?

+1

这并没有真正回答你的问题,但我从来没有发现的自动工具除了痛苦和困惑之外别无他法。其他构建系统正变得越来越普遍,如[CMake](http://www.cmake.org/)。他们有他们自己的问题,但通常与自动工具完全相同,但混淆和麻烦较少。如果你没有设置使用自动工具,你可能想看看一些替代品。 – sfstewman

回答

2

自动工具的功能往往会在边缘模糊。有一个体面的流程图描述订购hereMakefile.am通常是手写的。许多项目在源代码树的顶层保留一个简单的shell脚本,即autogen.shinitgen.sh。该autogen.sh我使用:

#! /bin/sh 

case `uname` in Darwin*) glibtoolize --copy ;; 
    *) libtoolize --copy ;; esac 

aclocal -I m4 --install 
autoheader 
autoconf 

automake --foreign --add-missing --force-missing --copy 

This仍然是我见过的最好的实用指南之一。我相信它也是以书籍形式提供的。

+0

你也可以运行'autoreconf',它是autotools套件的一部分,它的目的是按照正确的顺序运行它们,但是它可能对每个项目都不正确,因为它无法知道特定的目录或选项。请参阅http://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/autoreconf-Invocation.html – dajobe

0

你的Makefile.am应该是这个样子

bin_PROGRAMS = hello 
AUTOMAKE_OPTIONS = foreign 
hello_SOURCES = src/hello.c 

运行automake和它会创建一个Makefile.in

相关问题