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

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

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

開(kāi)通VIP
makefile 簡(jiǎn)介

這個(gè)是轉自哪里的就不記得了,那位大哥的原創(chuàng ),小弟謝過(guò)了^_^


GNU Make是一個(gè)開(kāi)發(fā)源代碼的Make工具。Make是什么?在命令行下寫(xiě)程序的人應該都知道,它是一個(gè)項目管理工具。它的最基本用途就是管理項目的編譯、 連接。它會(huì )按照規則(定義在規則文件中)、依賴(lài)順序對項目中的文件進(jìn)行編譯、連接或把它們安裝到系統中。GNU Make的可執行程序通常就是make.exe。
一個(gè)簡(jiǎn)單的例子—基本規則
下面來(lái)看一個(gè)簡(jiǎn)單的例子(以下內容均以Win32平臺為例):
文件名:makefile
1. # makefile
2. # this is a example of make file
3. all:a1 a2
4.   @echo this is all!
5. a1:
6.   @echo this is a1!
7. a2:
8.   @echo this is a2!
運行make后,結果如下:
this is a1!
this is a2!
this is all
現在讓我們來(lái)分析一下這個(gè)簡(jiǎn)單的規則文件。
第1、 2行不用說(shuō),一眼就可以看出是注釋。在Make規則文件中,注釋是以“#”開(kāi)始,是行注釋?zhuān)虲++中的“//”功能一樣。不過(guò)你可不能把它放到其它的語(yǔ) 句之后,否則就錯了。第3行就是規則開(kāi)始了!all:a1 a2一行中,規則的名字就是all,它通常是目標名(target)。一條規則可以有不止一個(gè)名字,像這一行,你也可以把它寫(xiě)成all all2:a1 a2。這時(shí),規則就有了兩個(gè)名稱(chēng)—all和all2。當然,還可以有更多,都看你自己。后面的5、7兩行也分別是兩條規則的起始。在“:”之后的,就是依 賴(lài)項。在這一行里,依賴(lài)項有兩個(gè),分別是a1和a2。這些依賴(lài)項可以是其它的規則名(目標名),也可以是文件名。依賴(lài)和目標之間的關(guān)系就是“依賴(lài)關(guān)系”。 一條規則中,可以有零個(gè)(像后面的兩條規則)、一個(gè)或多個(gè)依賴(lài)。第4行@echo this is all!是命令行。它是執行all規則時(shí)要執行的命令。要注意的是,一條規則內的命令要以tab為一行的起始,以表示命令是屬于一個(gè)規則。一條規則也可以 有多條命令,每條命令占一行(要以tab開(kāi)頭)。至于可以使用哪些命令,這完全取決于你使用的OS和SHELL。
當執行make時(shí),它會(huì )找到 第一條規則。然后,make就會(huì )檢查依賴(lài)和目標之間的關(guān)系。如果目標比依賴(lài)舊,就執行規則,以更新目標。執行完規則就結束。如何判定目標和依賴(lài)的新舊呢? 如果目標(文件)不存在,目標的時(shí)間就為0;如果目標(文件存在),目標的時(shí)間就為文件的修改時(shí)間。如果依賴(lài)項是一條規則,就執行依賴(lài)的規則(這里是一個(gè) 遞歸),然后依賴(lài)的時(shí)間就是當前最新時(shí)間;如果是一個(gè)存在的文件,就為文件的修改時(shí)間,否則就報錯。之后,就可以比較目標和依賴(lài)之間的關(guān)系。不過(guò),有一點(diǎn) 特殊的是,在沒(méi)有依賴(lài)項時(shí),依賴(lài)的時(shí)間為1。
在這個(gè)例子中,make先找到規則“all”,發(fā)現目標不存在,所以目標的時(shí)間為0;然后在查找 依賴(lài)“a1”,結果“a1”不存在;于是,執行規則“a1”。“a1”不存在,所以它的時(shí)間為0,而“a1”沒(méi)有依賴(lài),它的依賴(lài)時(shí)間為1;1>0, 所以,執行規則“a1”。然后返回規則“all”,再檢查依賴(lài)“a2”。“a2”執行過(guò)程同“a1”。這時(shí),“all”的目標時(shí)間為0,依賴(lài)時(shí)間為最新時(shí) 間。于是,執行規則“all”的命令。
當然,大家也可以指定一條規則讓make執行,比如:make a1這個(gè)命令就是告訴make程序不去找第一條規則,而是規則“a1”來(lái)執行。并且我們還可以一次執行多條規則,比如:執行make a1 a2就會(huì )連續執行“a1”、“a2”兩條規則。
OK,雖然講得很混亂,但也費了我半天的力氣。大家應該有一點(diǎn)了解make規則的執行過(guò)程了吧。
現在來(lái)總結一下依賴(lài)的寫(xiě)法。如下(中括號中的內容是可選內容):
Target : [dependence] [dependence2] […]
[command]
[command2]
[…]
Target可以是文件名。Dependence可以是其它的target名或文件名。Command就是操作系統所運行的命令行。
變量
一個(gè)make規則文件有這些內容就已經(jīng)基本可以工作了??墒?,當我們在編譯一個(gè)程序時(shí),如果有些內容要反復用到,每次都要寫(xiě)一長(cháng)串的話(huà),是很麻煩的。于是,make就引入了宏這個(gè)概念(其實(shí)也可以看成簡(jiǎn)單的腳本語(yǔ)言)。
宏變量的定義如下:
var1 = this is a macro demo!
var1就是變量名,它的值就是“this is a macro demo!”
如果我們要使用這個(gè)變量的值,那只有通過(guò)$這個(gè)運算符才行—$(var1)代表的就是“this is a macro demo!”。
如下makefile
1. var1 = this is a macro demo!
2. all:
3.   @echo $(var1)
結果輸出:
this is a macro demo!
用戶(hù)在執行命令行時(shí)也可以定義宏變量。其形式如下:
make all var1=”this is a test”
執行結果為:
this is a test
我們不僅可以使用自定義變量,還可以通過(guò)這種方式使用系統環(huán)境變量。這樣可以大大方便我們建議靈活的規則。如下makefile
1. all:
2.   @echo $(windir)
執行結果為:
C:\WinNT
(注意:makefile中的變量是大小寫(xiě)敏感的)
除此之外,makefile中還有一些內定的特殊變量。這些變量可以代替在不同的規則中的目標、依賴(lài)等內容。使得規則的建立更加便利。請看如下例子:
1. all : a.exe
2. a.exe : a.obj
3.   cl $< /Fo$@ /nologo
4. a.obj : a.c
5.   cl $< /c /Fo$@ /nologo
大家可以看到,這里用了$<和$@這兩個(gè)奇怪的符號。運行一下吧!
cl a.c /c /Foa.obj /nologo
a.c
cl a.obj /Foa.exe /nologo
很明顯,$<變成了a.c和a.obj,$@變成了a.obj和a.exe。應該明白了吧?
$@代表規則中的目標名(也就是規則名)。
$<代表規則中的依賴(lài)項目。注意,它只代表規則所有依賴(lài)項目中的第一項!
其它還有:
$^代表規則中所有的依賴(lài)項目。
$?代表規則中時(shí)間新于目標的依賴(lài)項目。
不僅如此,還可以給這些特殊的變量加一些限制。
如:
在規則
debug/out.exe : out.obj
中,$@代表debug/out.exe,而$(@D)代表目錄名debug,$(@F)代表文件名out.exe。其它如$(<D)、$(<F)、$(^D)、$(^F)、$(?D)、$(?F)與此類(lèi)似。
內建規則
為了方便使用,makefile中加入了一些基本規則。在沒(méi)有寫(xiě)明命令的情況下,程序會(huì )按目標以及依賴(lài)的類(lèi)型自動(dòng)選擇一些默認的命令來(lái)編譯程序。
如下表:
類(lèi)型目標類(lèi)型依賴(lài)類(lèi)型命令
C程序*.o*.c$(CC) -c $(CPPFLAGS) $(CFLAGS)
C++程序*.o*.cc$(CXX) -c $(CPPFLAGS) $(CXXFLAGS)
匯編程序*.o*.s$(AS) $(ASFLAGS)
Frotran*.o*.f$(FC) -c $(FFLAGS)
Pascal*.o*.p$(PC) -c $(PFLAGS)
連接*.out*.o$(CC) $(LDFLAGS) name.o $(LOADLIBES) $(LDLIBS)
大家可以看到,在這個(gè)表中使用了很多不同的宏。這些宏都是編譯器內建的,我們也可以手工修改它們,這樣,就可以實(shí)現對內建規則的修改。
請看如下makefile:
1. CC = gcc
2. a : a.o
呵呵,是不是很奇怪?什么都沒(méi)有寫(xiě),只寫(xiě)了一個(gè)沒(méi)有內容的規則,怎么能運行呢?試試吧!結果如下:
gcc    -c -o a.o a.c
gcc   a.o   -o a
在第1行中,我把內建變量CC的值改成了gcc(默認是cc)。這樣,在編譯時(shí)就會(huì )使用我所設定的gcc來(lái)工作。第2行,我給出了目標a和依賴(lài)a.o。由于有從a.c到a.o的默認規則,如果有a.c這個(gè)文件的話(huà)make就會(huì )自動(dòng)使用內建規則來(lái)編譯。一切OK!
其它的規則你也可以試試。
除了這種傳統規則,還有一種內建規則,叫后綴規則。請看如下makefile:
1. a.exe : a.o
2.   cl a.o /MD /nologo
3. .c.o :
4.   cl $^ /c /Fo$@ /MD /nologo
在這個(gè)規則文件中,沒(méi)有說(shuō)明a.o是由哪一個(gè)源文件生成,只給了一個(gè).c.o的奇怪規則。這個(gè)規則的意思是對于以.o為擴展名的目標,都以相應的.c源程序來(lái)生成。生成的命令就是規則中給出的那條命令。
當然,make中并沒(méi)有包含所有的可用擴展名。它包含了.c、.o、.s、.cc等UNIX下常用的擴展名。在Windows下,我們還要手工添加幾個(gè)名 稱(chēng),否則不是很方便。要添加擴展名,就要通過(guò).SUFFIXES這個(gè)預處理標識來(lái)完成。比如我要添加.asm和.inc這兩種擴展名。只要在 makefile中加上.SUFFIXES .asm .inc就可以了。
其它的內建規則大家可要自己去試了,不自己摸索,很難掌握好的!
常用的參數
前面介紹了半天makefile的寫(xiě)法,現在來(lái)說(shuō)說(shuō)make程序的基本參數吧。
-f參數可以指定makefile的名稱(chēng),這樣,就可以不用makefile做為規則文件的名字了。
-i參數可以使make程序忽略運行時(shí)的錯誤,繼續運行。
-v參數用來(lái)顯示make程序的版本號。
–help參數可以顯示make程序的參數幫助。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
makefile學(xué)習--aiwa的筆記
(MAKE)手動(dòng)建立makefile簡(jiǎn)單實(shí)例解析 - vim+gcc+gdb+make -...
KBUILD系統原理分析
如何編譯linux驅動(dòng)模塊
Makefile文件編寫(xiě)
如何自己編寫(xiě)Makefile
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

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