欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
make和makefile入門(mén)zz :: SkyBlue

make和makefile入門(mén)
澳洲白面鴿 ----FREOS項目小組成員, 2003.5.10


本文講述的是簡(jiǎn)單的make和makefile基礎知識,幫助大家了解minix的boot目錄下
的makefile文件,還要求大家先了解linux下的一些常見(jiàn)命令。

make的作者:Richard Stallman and Roland McGrath
GNU make滿(mǎn)足POSIX.2的標準。
如果想執行make命令,首先編寫(xiě)一個(gè)makefile文件,該文件主要是描述你的
程序中所有文件的關(guān)系以及你所用的命令(編譯命令等)。在一個(gè)程序中,可執行文
件是從目標文件升級(update)而來(lái)。如果你創(chuàng )建了一個(gè)合適的makefile文件,當你
改變了部分源文件內容時(shí),你可通過(guò)執行make命令來(lái)重新編譯。
make程序通過(guò)使用makefile作為配置文件,通過(guò)檢測文件的更新時(shí)間,來(lái)決
定哪些文件需要重新編譯。你也可以通過(guò)給make命令帶命令行參數來(lái)決定那些文件
需要重新編譯。一般,默認使用makefile文件來(lái)告訴make命令如何編譯和鏈接程序。
makefile的常見(jiàn)語(yǔ)法規則:
1. target ... : dependencies ...
command
...
...
target一般為程序所生成的文件名。例如,是可執行文件名或目標文件名;一
個(gè)目標也可以是一個(gè)將要執行的動(dòng)作的名稱(chēng),見(jiàn)下例中的clean。
dependencies就是作為輸入文件,被用來(lái)生成目標文件。一個(gè)目標文件可以由
好幾個(gè)輸入文件編譯而成。
command就是make所執行的動(dòng)作,可以由好幾個(gè)命令組成,每個(gè)命令獨占一行。
注意,每個(gè)命令行開(kāi)頭必須有一個(gè)Tab鍵,千萬(wàn)不要忘記。
通常,命令是用來(lái)編譯輸入文件以生成目標文件的。當然,命令也可以不需要
任何依賴(lài)(dependencies)。除了上述語(yǔ)法規則模塊,一個(gè)makefile文件可能還包
含其他內容。

2.一個(gè)簡(jiǎn)單的makefile文件的分析:
edit : main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
cc -o edit main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o

main.o : main.c defs.h
cc -c main.c
kbd.o : kbd.c defs.h command.h
cc -c kbd.c
command.o : command.c defs.h command.h
cc -c command.c
display.o : display.c defs.h buffer.h
cc -c display.c
insert.o : insert.c defs.h buffer.h
cc -c insert.c
search.o : search.c defs.h buffer.h
cc -c search.c
files.o : files.c defs.h buffer.h command.h
cc -c files.c
utils.o : utils.c defs.h
cc -c utils.c
clean :
rm edit main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o

解析,\為續行符。edit目標文件依賴(lài)main.o、kbd.o、command.o、 display.o、insert.o、search.o、files.o和utils.o等八個(gè)文件,并通
過(guò)隨后的CC命令編譯而成,其它類(lèi)似。執行make命令即可生成edit可執行文件或
上述八個(gè).o文件。執行make clean命令可刪除edit可執行文件和上
述八個(gè).o文件。
make命令并不在乎你使用什么編譯命令(它由你來(lái)決定),它只在乎文
件之間的依賴(lài)關(guān)系,并重新編譯需要更新的文件。目標clean并不是一個(gè)文
件,而是一個(gè)動(dòng)作名,如果你不想使用clean,那么它和其他的規則模塊沒(méi)有任何
關(guān)系。
3.make如何處理makefile文件:
make一般從第一個(gè)規則塊(rule)開(kāi)始(以.開(kāi)頭的目標名不能算作一個(gè)
rule),被稱(chēng)作默認目標(default goal),也就是make命令要生成的最終
文件。如上例,edit是最終的目標文件,被作為第一個(gè)rule。當你發(fā)出make命令
后,make命令查找當前目錄中的makefile文件,然后開(kāi)始執行
第一個(gè)rule。如上例,第一個(gè)rule就是生成edit可執行文件。在完全執行
該rule之前,它先要處理該rule中所有的依賴(lài)(dependencies)。而這些依賴(lài)
(dependencies)又必須根據它們自己的rule來(lái)生成。如果一個(gè)目標文件的依
賴(lài)文件比它本身更新,或者目標文件根本就不存在,那么將根據對應的rule
重新編譯生成新目標文件。除了第一個(gè)rule外,其它的rule也能執行,是因
為第一個(gè)rule的依賴(lài)(dependencies)與其他的rule有關(guān),否則只有第一個(gè)
rule被執行;如果你想執行出第一個(gè)rule以外的其他獨立rule,那么就必須
通過(guò)make命令行參數來(lái)指明,例如上面的make clean。

4.makefile文件中變量的使用:
例如,我們常常用objects, OBJECTS, objs, OBJS, obj, 或者OBJ, 來(lái)
表示目標文件,例如上例,我們可以用:
objects = main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
那么在makefile文件中,可用$(objects)代替上述八個(gè).o文件。

5.讓make命令自己推理:
make命令有一個(gè)隱含的規則,它能通過(guò)查找同名的.c文件和cc -c命令來(lái)
自動(dòng)更新.o文件。也就是在一個(gè)rule中,能自動(dòng)把.c文件添加到依賴(lài)
(dependencies)列表中。這樣上述例子可簡(jiǎn)寫(xiě)為:
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)
6.makefile的另一種風(fēng)格:
把目標文件放在一起而不是把依賴(lài)放在一起,上例可修改為:
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
但是有人也不喜歡它,因為它不能一次看清某個(gè)目標文件的依賴(lài)情況。

7.刪除目錄或文件的rule:
.PHONY : clean
clean :
-rm edit $(objects)
其中,.PHONY : clean 可阻止make命令使用一個(gè)名為clean的真實(shí)文件,具體見(jiàn)
以后分析。

8.怎樣編寫(xiě)一個(gè)makefile文件:
makefile包含五個(gè)方面:explicit rules(顯式rule), implicit rules(隱式
rule), variable definitions(變量), directives(指示符), 和comments(注釋)
。顯式rule,指明目標文件的依賴(lài)以及創(chuàng )建或更新目標文件所用的命令;隱式
rule通過(guò)同名文件和指定命令來(lái)創(chuàng )建和更新目標文件;變量的定義見(jiàn)上面的例子
;指示符是為了幫助make命令在讀取makefile文件時(shí)作一些特定的事情(見(jiàn)以后分
析);注釋行一般用#開(kāi)頭。

9.命名一個(gè)makefile文件:
默認情況下,make命令會(huì )尋找下列文件:GNUmakefile, makefile和Makefile
。如果你不指定makefile文件,那么你必須指定一個(gè)最終的目標文件,make命令
會(huì )自動(dòng)使用內部隱含的rule來(lái)編譯。如果你不想用默認的makefile文件名,你也
可以通過(guò) -f filename 或 --file=filename,來(lái)告訴make應該讀取的文件。如果
你用 -f或 --file指定了多個(gè)文件,那么它們將按順序被聯(lián)接在一起。如果你用
-f或 --file指定,那么將不自動(dòng)查找默認的makefile等文件。

10.包含其他的makefile文件:
include標識符告在訴make命令,在讀makefile文件之前,要先讀若干個(gè)其他
的makefile文件。include標識符使用方法為:include filenames...。在每行開(kāi)
頭的空格被忽略。但是不能以tab健開(kāi)頭,否則可能會(huì )被當作一個(gè)命令行。在
include和filename之間必須要用空格隔開(kāi)。當make處理一個(gè)include標識符時(shí),
它先暫緩處理當前的makefile,轉而讀該標識符所列舉的文件。當這些文件被處
理完畢后,make接著(zhù)讀被懸掛的makefile文件。
11.假冒的目標(phony target):
一個(gè)假冒目標不是一個(gè)真正的文件名,它僅僅表示某些特定make命令的擴展
,用假冒的目標文件有兩個(gè)原因:避免和同名文件發(fā)生沖突。例如:
clean:
rm *.o temp
因為rm命令不能創(chuàng )建一個(gè)clean文件,可能永遠都沒(méi)有那樣的文件存在。因此,每
當你執行make clean命令時(shí),rm命令都會(huì )被執行。但是如果有一個(gè)clean文件存在
了,那么這個(gè)假冒的目標將不會(huì )工作。因為它沒(méi)有依賴(lài),所以所存在的clean文件
被認為是最新的,而導致rm命令不能被執行。為了避免這個(gè)問(wèn)題,可以顯式申明
該目標是phony類(lèi)型,即:
.PHONY: clean
clean:
rm *.o temp
申明以后,就可以知道clean并非一個(gè)真正的文件,在每次執行make clean時(shí),它
都必須被執行。當然,Phony targets也可以有依賴(lài)。當一個(gè)目錄包含幾個(gè)程序時(shí)
,在一個(gè)makefile文件中描述所有這些程序也很方便。用all假冒目標來(lái)表示,例
如:
all : prog1 prog2 prog3
.PHONY : all
prog1 : prog1.o utils.o
cc -o prog1 prog1.o utils.o
prog2 : prog2.o
cc -o prog2 prog2.o
prog3 : prog3.o sort.o utils.o
cc -o prog3 prog3.o sort.o utils.o
現在只需要用make命令就可以重新編譯這三個(gè)文件,也可用參數來(lái)指定編譯特定
的文件,例如make prog1 prog3。
12.主要定義變量:
$* 不包含擴展名的目標文件名稱(chēng)。
$+ 所有的依賴(lài)文件,以空格分開(kāi),并以出現的先后為序,可能包含重復的
依賴(lài)文件。
$< 第一個(gè)依賴(lài)文件的名稱(chēng)。
$? 所有依賴(lài)文件,以空格分開(kāi),這些依賴(lài)文件的修改日期比目標文件的創(chuàng )
建日期晚。
$@ 目標的完整名稱(chēng)。
$^ 所有的依賴(lài)文件,以空格分開(kāi),不包含重復的依賴(lài)文件。
$% 如果目標是歸檔成員,則該變量表示目標的歸檔成員名。

13.用戶(hù)的標準目標:
所有的GNU程序都應該有些列目標(部分略):
all: 編譯全部程序。它應該是缺省的目標。
install: 編譯全部程序,并把可執行文件,庫文件等文件拷貝到它應該在的
目錄。
clean: 刪除文件。

歡迎訪(fǎng)問(wèn)FREOS項目主頁(yè)
*********************minix的boot目錄下makefile解析*******************
# Makefile for the boot monitor package. 注釋
#
CC= exec cc 命令
CC86= exec cc -mi86 -Was-ncc

CFLAGS= -I.. -m -O
LD= $(CC) -s -.o
LD86= $(CC86) -.o
BIN= /usr/bin
MDEC= /usr/mdec

all: bootblock boot masterboot extboot installboot edparams 目標文件

installboot.o bootimage.o: image.h
boot.o bootimage.o: boot.h
rawfs.o rawfs86.o installboot.o boot.o bootimage.o: rawfs.h 申明依賴(lài)關(guān)系

bootblock: bootblock.s
$(LD86) bootblock.s -o bootblock

masterboot: masterboot.s
$(LD86) masterboot.s -o masterboot

extboot: extboot.s
$(LD86) extboot.s -o extboot

boot.o: boot.c
$(CC86) $(CFLAGS) -c boot.c

bootimage.o: bootimage.c
$(CC86) $(CFLAGS) -c bootimage.c

rawfs86.o: rawfs.c rawfs.o
ln -f rawfs.c rawfs86.c
$(CC86) $(CFLAGS) -c rawfs86.c
rm rawfs86.c
-cmp -s rawfs.o rawfs86.o && ln -f rawfs.o rawfs86.o

boot: boothead.s boot.o bootimage.o rawfs86.o
$(LD86) boothead.s -i boot.o bootimage.o rawfs86.o -o boot
install -S 12kb boot

installboot: installboot.o rawfs.o
$(CC) $(STRIP) -i -o installboot installboot.o rawfs.o
install -S 6kw installboot

edparams: edparams.c
$(CC) $(CFLAGS) $(STRIP) -i -o edparams edparams.c
install -S 16kw edparams

install: $(MDEC)/bootblock $(MDEC)/boot $(MDEC)/masterboot \
$(MDEC)/extboot $(BIN)/installboot $(BIN)/edparams
執行make install命令才執行?

$(MDEC)/bootblock: bootblock
install -cs -o bin -m 644 $? $@

$(MDEC)/boot: boot
install -cs -o bin -m 644 $? $@

$(MDEC)/masterboot: masterboot
install -cs -o bin -m 644 $? $@

$(MDEC)/extboot: extboot
install -cs -o bin -m 644 $? $@

$(BIN)/installboot: installboot
install -cs -o bin $? $@

$(BIN)/edparams: edparams
install -cs -o bin $? $@

clean:
rm -f *.bak *.o
rm -f bootblock installboot boot masterboot extboot edparams
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
makefile
Makefile的編寫(xiě)指導
Linux/Unix環(huán)境下的make-摘錄
GNU make中文手冊-第二章: GNU make 介紹
如何自己編寫(xiě)Makefile
C語(yǔ)言
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久