国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

C語言的make和Makefile

2019-11-08 18:22:39
字體:
供稿:網(wǎng)友

C語言的make和Makefile

make和Makefile的介紹

make和Makefile

1:make和Makefile的介紹:

1:概念 在軟件的工程中的源文件是不計(jì)其數(shù)的,其按照類型,功能,模塊分別放在若干個目錄中,哪些文件需要編譯,那些文件需要后編譯,那些文件需要重新編譯,甚至進(jìn)行 更復(fù)雜的功能操作,這就引入了我們的系統(tǒng)編譯的工具:

linux和unix中,有一個強(qiáng)大的使用程序,叫make,可以用它來管理多模塊程序的編譯和鏈接,直至生成可執(zhí)行文件

make使用程序讀取一個說明文件,稱為Makefile,Makefile文件中描述了整個軟件工程的 編譯規(guī)則和各個文件之間的依賴關(guān)系;

Makefile就像是一個Shell腳本一樣,其中可以執(zhí)行操作系統(tǒng)的命令,它帶來的好處就是我們能夠?qū)崿F(xiàn)“自動化編譯”,一旦寫好,只要一個make命令,整個軟件功能就完全自動編譯,極大的提高了軟件開發(fā)的效率;

make是一個命令工具,是一個解釋Makefile中指令的命令工具,一般來說大多數(shù)IDE都有這個命令

使用make可以是重新編譯的次數(shù)達(dá)到最小化;

2:make和Makefile

1:make的使用語法:

make使用語法: make [選項(xiàng)][目標(biāo)][宏定義] 選項(xiàng)列表: -d 顯示調(diào)試信息(debug) -f<文件> 指定從那個文件中讀取以來關(guān)系,默認(rèn)文件是"Makefile"或者"makefile","-"表示從標(biāo)準(zhǔn)輸入(file) -h 顯示所有選項(xiàng)的簡要說明(help) -n 不運(yùn)行任何Makefile命令,只去現(xiàn)實(shí)它們(no) -s 安靜的方式運(yùn)行,不顯示任何信息(silence) 可以使用-h來獲取更多的選項(xiàng):

2:Makefile的編寫原則和規(guī)則

當(dāng)make命令不帶選項(xiàng)運(yùn)行的時候,它從Makefile中讀取指定規(guī)則當(dāng)制定規(guī)則不同與Makefile(makefile)的其他文件中時候,就要運(yùn)行帶有-f選項(xiàng)的make命令。如make.fray.Makefilemake -f make.fray.Makefile

Makefile的編寫規(guī)則一:

目標(biāo)列表:關(guān)聯(lián)性列表<TAB>命令列表目標(biāo)列表:是用一個或者多個空格分開的目標(biāo)文件的清單關(guān)聯(lián)性列表:同樣是一個或者多個空格分開的目標(biāo)文件,是目標(biāo)列表所以來的多個目標(biāo)文件的清單;命令列表:用于創(chuàng)建目標(biāo)文件的將要執(zhí)行的命令清單,這個命令列表被換行符號分開,命令列表中的每個命令必須要以<TAB>字符開始;如:##Sample power:power.c gcc -o power power.c如:#Sample power:power.o demo.o gcc -o power power.o demo.o power.o:power.c gcc -o power.o -c power.c demo.o:demo.c gcc -o demo.o -c demo.c注意:書寫的形式類似于倒推的形式

Makefile的編寫規(guī)則二:(不建議使用)

目標(biāo)列表:關(guān)聯(lián)性列表;命令列表命令列表是一系列被分號隔開的命令,一個很長的命令行要續(xù)行的時候需要用一個反斜杠符號如:all/mymath_test:src/mymath.c src/mymath_test.c; /gcc -o all/mymath_test src/mymath.c / src/mymath_test.c

注意:makefile書寫主要注意的是: 1:編譯規(guī)則 2:依賴關(guān)系 3:倒推原理 4:使用make命令去執(zhí)行 5:如果已經(jīng)是最新的文件的時候,就不會再去編譯執(zhí)行了 6:make去讀取makefile的時候,是按照依賴文件的順序去查找并且執(zhí)行命令的 7:make在編譯的時候,如果發(fā)現(xiàn)被編譯的文件已經(jīng)是最新的了,就不會再去編譯(減少了編譯次數(shù)) 8:make文件是根據(jù)被編譯文件的時間戳去判斷文件是否是當(dāng)前最新的文件,如果是最新的,那么就會去重新編譯,如果不是最新的,就不會去進(jìn)行編譯; 9:千萬要注意makefile中編譯命令前面的分隔符

Makefile變量的使用

簡單變量: 定義 變量名字:=[文本] 這類變量的實(shí)質(zhì)就是一組字符串 添加 變量名字+=[文本]或者 變量名字:=[文本][文本] 引用變量 $(變量名) $單字符變量(指的是但字符的變量 a:=123 $a) 如:G:=gcc 一般我們都是定義成大寫的 $G -o power power.c內(nèi)置變量: $@ 當(dāng)前目標(biāo)的名詞 $? 比當(dāng)前目標(biāo)更新的已修改的依賴性列表 $< 依賴性列表的第一個文件 $^ 用空格分開的所有依賴性列表

虛目標(biāo)

虛目標(biāo)是不存在的文件虛目標(biāo)允許你去強(qiáng)制執(zhí)行某些事件,但這些事件在正常的規(guī)則中是不會發(fā)生的 虛目標(biāo)不是真正的文件,make命令可以使用針對他們的任意規(guī)則 虛目標(biāo)總是使與之有關(guān)的命令被執(zhí)行all 生成工程中所有可以執(zhí)行者,通常是makefile的第一個生成目標(biāo)test 運(yùn)行程序的自動測試套件clean 刪除make all生成的所有文件install 在系統(tǒng)目錄中安裝工程項(xiàng)目生成的可執(zhí)行文件和文檔uninstall 刪除make install安裝的所有文件

特殊目標(biāo)

make中有一些與定義的目標(biāo),這些預(yù)定義目標(biāo)被make以一種特殊的方式進(jìn)行處理,這些目標(biāo)稱為特殊目標(biāo);.DEFAULTS 如果make找不到生成目標(biāo)的任何makefile入口或后綴規(guī)則,就執(zhí)行與目標(biāo)相關(guān)的命令.IGNORE 如果某一行makefile包含該目標(biāo),make忽略錯誤代碼并繼續(xù)建立,如果一個命令不正常存在,make自然會停止,帶有-i選項(xiàng)的make命令可以執(zhí)行相同的任務(wù).PHONY 允許你指定一個不是文件的目標(biāo),所以您能只是make調(diào)用一系列makefile中的命令,即使在當(dāng)前目錄中有一個具有相同名字的文件.SILENT make執(zhí)行這些命令,但是不顯示這些命令,帶有-s的make可以執(zhí)行相同的人物,.SUFFIXES 為目標(biāo)指定的前提(后綴)可以與后綴規(guī)則相互關(guān)聯(lián),如果與目標(biāo)沒有相關(guān)性的前提,以存在的后綴列表就會被刪除

默認(rèn)模式規(guī)則

make中有許多預(yù)定義的規(guī)則成為后綴規(guī)則,它可以讓make自動執(zhí)行許多任務(wù)為了建立一個目標(biāo),make會遍歷一連串的依賴關(guān)系,這是為了決定從何處開始建立,如果沒有找到目標(biāo)文件,make就按有限順序查找源文件 默認(rèn)模式規(guī)則: %o:%c $(CC) $(CFLAGS) -c $< $o:%s $(CC) $(AFLAGS) -o $@ $<

Makefile中的相關(guān)通配符:

#:注釋/:連接符號關(guān)聯(lián)列表和命令列表中可以使用shell通配符號? * %等

附上一個簡單的makefile

#SampleCC:=gccCFLAGS:=-IincludeCFLAGS+=-cTARGET:=all/mytest_test3DEPEND:=obj/mymath.o DEPEND+=obj/mymath_test.o$(TARGET):$(DEPEND) $(CC) -o $@ $^#obj/mymath.o:src/mymath.c# $(CC) -o $@ $(CFLAGS) $^#obj/mymath_test.o:src/mymath_test.c# $(CC) -o $@ $(CFLAGS) $^#使用make中的默認(rèn)的模式規(guī)則obj/%.o:src/%.c $(CC) -o $@ $(CFLAGS) $^ #聲明clean是一個虛目標(biāo).PHONY:cleanclean: rm -rf obj/mymath.o obj/mymath_test.o

在網(wǎng)上搜了好久,搜到一篇關(guān)于makefile寫的非常詳細(xì)的文檔,在這里分享出來,希望對喜歡C的同學(xué)可以有點(diǎn)幫助。

How to write makefile

最后謝謝大家的訪問:歡迎大家持續(xù)訪問,有錯誤的地方希望各位看客能夠及時指出,謝謝


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 安丘市| 惠州市| 义乌市| 冷水江市| 龙山县| 德阳市| 同心县| 北安市| 通渭县| 岳池县| 东方市| 荆州市| 邳州市| 航空| 盐池县| 韶山市| 庆安县| 河北区| 尉犁县| 兰溪市| 綦江县| 北碚区| 洛南县| 江西省| 东兰县| 西畴县| 抚州市| 敖汉旗| 沁水县| 乌兰浩特市| 繁峙县| 海门市| 龙井市| 定南县| 乌拉特前旗| 东乡族自治县| 同心县| 洛隆县| 怀来县| 新蔡县| 石渠县|