我正在尝试使用autotools为C程序创建构建系统。但是,在阅读info automake
之后,我仍然对开发人员调用哪些工具的顺序感到困惑。
让我们考虑一个非常简单的hello world应用程序。在应用程序的根目录中,只有简单的src/hello.c
而没有别的。需要以什么顺序调用哪些工具来创建configure
和Makefile
?
我自己想到(部分阅读文档,部分只是尝试)autoscan
首先出现并生成configure.ac
的“草图”。然后autoheader
显然会创建一个头文件(为什么?)。接下来autoconf
最终会创建configure
脚本,最终会创建config.h
。
但是,我仍然遗漏Makefile
我相信是automake
创建的,但这需要Makefile.am
我不知道如何生成。该文件是由生成器生成还是由开发人员手写?
答案 0 :(得分:2)
自动工具的功能往往会在边缘模糊。有一个体面的流程图描述了排序here。 Makefile.am
通常是手写的。许多项目在源树的顶层保留一个简单的shell脚本,即autogen.sh
或initgen.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仍然是我见过的最好的实用指南之一。我相信它也可以书本形式出现。
答案 1 :(得分:1)
你的Makefile.am应该看起来像
bin_PROGRAMS = hello
AUTOMAKE_OPTIONS = foreign
hello_SOURCES = src/hello.c
运行automake,它将创建一个Makefile.in