|
//*************************************************************
译序
初学linux系统,感觉linux底下的编译,链接程序真的很麻烦。
因此想到了用Autoconf等工具。找到了Autobook这本好书。
也不知道有没有人翻译过这本书。
该书由女友Ellen翻译,在此对她表示感谢。
该书原文请参考 http://sources.redhat.com/autobook/...tobook_toc.html
如果翻译时有什么错误请
Ellengut2002@yahoo.com或者jasongut2002@126.com
转载请保留译序,3x.
//--------------------------------
4. `关于Makefile's的简介
`Makefile's规定文件之间的依赖关系。它还规定了如何理顺这些关系来达到一个总的目标(即target)。由make处理`Makefile's。其他工具书详细描述了`Makefile's的语法及Make的各种应用 。本章节将概述`Makefile's,其中的信息足以在`Makefile.am'(参见第七部分的 Introducing GNU Automake)和`Makefile.in'中编写定制的规则。
4.1 `目标和依赖关系
make程序试图通过更新目标的所有依赖关系来更新目标。这些依赖关系可能有更进一步的依赖关系。因此,当处理一个典型的`Makefile'时,一个潜在的复杂依赖关系图就形成了。以下是一个简单的`Makefile':
//***********************
all: foo
foo: foo.o bar.o baz.o
.c.o:
$(CC) $(CFLAGS) -c $< -o $@
.l.c:
$(LEX) $< && mv lex.yy.c $@
//***********************************
我们可以画出如下的依赖关系图:
//***************************
----------------all
|
----------------foo
----------------|
--------.-------+-------.
-------/--------|-------\
------foo.o----bar.o----baz.o
-------|--------|--------|
------foo.c----bar.c-----baz.c
------------------------ |
------------------------baz.l
//***********************************
除非`Makefile'包含一个的make指令,否则所有的目标都被认为是文件名,而且必须制定规则来创建这些文件或者以某种方式更新它们。
当依赖关系中有叶子节点(见译注leaf node)时, Makefile'就必须包含一组命令集shell。该命令集利用依赖关系来更新被依赖者。令许多Make使用者大为懊恼的是,“更新”就意味着被依赖者的时戳比目标的时戳更晚。此外,shell命令集中的每个命令都在它们自己的子shell中运行。除非Makefile'对make有其他的指示,否则每个命令必须以0退出码表示退出成功。
可以编写能被无条件执行的目标规则。要达到该目的只需规定目标没有被依赖者。以下是一条多数使用者都必须熟悉的简单规则:
//**************************
clean:
-rm *.o core
//***********************
//译注:
leaf node:翻译成叶子节点是直译,可感觉不是很好,那位有更好的翻译?
原文如下 When leaf nodes are found in the dependency graph, the `Makefile' must include a set of shell commands to bring the dependent up to date with the dependency. |
|