日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

GNU Make 簡介( 三 )



當(dāng)".c"文件以這樣的方式使用時,將自動加入到依賴關(guān)系中;由是在省略命令的前提下,可以將".c"文件從依賴關(guān)系中省略 。以下是簡化過的makefile:

--------------------------------------------------------------------------------
objects = main.o kbd.o command.o display.o insert.o search.o files.o utils.o

edit : $(objects)
cc -o edit $(objects)

main.o : defs.h
kbd.o : defs.h command.h
command.o : defs.h command.h
display.o : defs.h buffer.h
insert.o : defs.h buffer.h
search.o : defs.h buffer.h
files.o : defs.h buffer.h command.h
utils.o : defs.h
.PHONY : clean
clean :
-rm edit $(objects)
---------------------------------------------------------------------------------

1.7 另一種風(fēng)格

如果makefile 中的目標(biāo)都是以隱含規(guī)則生成,可以將規(guī)則按照依賴關(guān)系分組:
----------------------------------------------------------------------------
objects = main.o kbd.o command.o display.o insert.o search.o files.o utils.o

edit : $(objects)
cc -o edit $(objects)
$(objects) : defs.h
kbd.o command.o files.o : command.h
display.o insert.o search.o files.o : buffer.h
----------------------------------------------------------------------------

這里"defs.h"作為所有目標(biāo)文件的依賴 。這種風(fēng)格是好是壞取決于個人喜好,它非常緊湊,但是將每個目標(biāo)的依賴信息放在一起看起來更清楚一些 。

1.8 清理

編寫規(guī)則不至于編譯程序 。Makefile 通常描述如何做其它事情:比如刪除目錄中的目標(biāo)文件和可執(zhí)行文件來清理目錄 。例子中是這樣寫的:

clean:
rm edit $(objects)

實際情況是,我們需要處理一些意外事件:存在一個叫做"clean"的文件;如果rm 出錯,并不希望make 過程停止下來,修改過的版本如下:

.PHONY : clean
clean :
rm edit $(objects)

這樣的規(guī)則當(dāng)然不能放在makefile 的開始,因為這并不是我們?nèi)笔∫龅墓ぷ?。由于"clean"并不是"edit"的依賴,在運行make 時沒有參數(shù)時,這條規(guī)則不會執(zhí)行;要執(zhí)行這個規(guī)則,必須運行"make clean" 。

Makefile
Makefile 中包含五種內(nèi)容:顯式規(guī)則,隱式規(guī)則,變量定義,指令(directive)和注釋 。

顯式規(guī)則描述如何生成規(guī)則的目標(biāo),它列出了目標(biāo)依賴的文件,指定了產(chǎn)生或更新目標(biāo)的命令

隱式規(guī)則描述如何生成基于文件名的一類文件,說明目標(biāo)可能依賴于和其文件名類似的文件,指定了相應(yīng)的命令 。

指令類似與編譯器的偽指令,包含:指示make 讀入另一個makefile;決定是否忽略makefile 中的一部分;定義一個變量;一行中‘#"開始是注釋,直到行末,除非遇到續(xù)行符號 。在"define"和命令中不能有注釋,其它情況下注釋可出現(xiàn)在任何地方 。

2.1 makefile 名字

缺省情況下,make 以下列名字查找makefile:"GNUmakefile","makefile" 和 "Makefile"(注意大小寫) 。通常你的makefile 應(yīng)叫做"makefile"或"Makefile" 。"GNUmakefile"不推薦,除非你的makefile 是為GNU 的make 定制的,其它的make 不認(rèn)為該名字是一個makefile 的名字 。如果你使用非標(biāo)準(zhǔn)命名的makefile,必須用命令開關(guān)"-f" 或 "-file" 。參數(shù) "-f NAME" 或 "--file NAME"告訴make 讀入NAME 作為makefile 。如果使用多個該開關(guān),所有的文件將按順序連接起來 。如果使用該選項,標(biāo)準(zhǔn)的makefile 名字不會自動檢測 。

2.2 包含

"include"指令告訴make 暫停處理余下的內(nèi)容,讀入其它makefile 。語法如下:

include FILENAMES

這一行起始可以有空格,但TAB 字符不允許 。如果文件名包含變量或函數(shù),這些將被擴(kuò)展 。

2.3‘MAKEFILE"變量

如果環(huán)境變量"MAKEFILE"已定義,make 認(rèn)為它的值是一系列空格隔開的文件名,這些文件在處理其它makefile 前被make 程序讀入 。這類似于include 指令;這些文件中的目標(biāo)不會影響缺省目標(biāo),而且如果文件未找到的話,make 并不認(rèn)為是錯誤 。這個變量的主要用途是遞歸引用make 程序時通訊 。

推薦閱讀