欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

makefile該如何入門(mén)

本篇文章為大家展示了makefile該如何入門(mén),內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

辰溪網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),辰溪網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為辰溪1000+提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的辰溪做網(wǎng)站的公司定做!

makefile文件是用來(lái)幫助編譯和管理C++項(xiàng)目代碼的,需要配合make命令使用。makefile里也可以執(zhí)行其它shell操作,具備一部分.sh腳本的功能。

makefile內(nèi)容的編寫(xiě)按照如下規(guī)則

目標(biāo)1:依賴1  命令1
目標(biāo)2:依賴2  命令2
目標(biāo)3:依賴3  命令3.........................目標(biāo)N:依賴N            命令N

命令可以是任意的shell語(yǔ)句。多數(shù)情況下,命令都是起到了從依賴生成目標(biāo)的功能。例如從.cpp文件生成.o文件,那么命令一定包括g++和一些編譯參數(shù)的完整的編譯命令。
目標(biāo)1 2 3可以是嵌套依賴的,如果依賴1里包含目標(biāo)2 目標(biāo)3,那就是一種嵌套的依賴。也可以是獨(dú)立的,例如目標(biāo)1 2 3就是三個(gè)獨(dú)立的可執(zhí)行文件,或者三個(gè)動(dòng)態(tài)庫(kù),那么他們之間是可以完全沒(méi)有依賴關(guān)系的,寫(xiě)在一個(gè)makefile文件里只是便于統(tǒng)一管理。
命令前要以一個(gè)tab開(kāi)頭 。如果使用空格代替tab,執(zhí)行make命令時(shí)會(huì)報(bào)

[root@localhost makefiletest]# makemakefile:5: *** missing separator (did you mean TAB instead of 8 spaces?).  Stop.

以下面簡(jiǎn)單的C++代碼為例,說(shuō)明makefile的具體使用。

源代碼文件test.cpp

#include <string>#include <iostream>#include<iomanip>
int main(int argc, char** argv){using namespace std;int i =1 ;int j = 2;        j += 3;cout << j<<endl;}

makefile文件,文件就是makefile

CC=g++all = test.o
test: $(all)$(CC) -o test $(all)
test.o: ./test.cpp$(CC) -c test.cpp
clear:        rm -f *.o test

執(zhí)行make命令

[root@localhost makefiletest]# makeg++ -c test.cppg++ -o test test.o[root@localhost makefiletest]# ls -lrttotal 24-rw-r--r--. 1 root root  196 Aug  6 11:00 test.cpp-rw-r--r--. 1 root root  120 Aug  6 11:04 makefile-rw-r--r--. 1 root root 2328 Aug  6 11:04 test.o-rwxr-xr-x. 1 root root 8840 Aug  6 11:04 test

正確生成了test  test.o

makefile中的“目標(biāo)1”test是個(gè)可執(zhí)行文件,也是最終我們需要的東西。test依賴$(all)這個(gè)變量,文件開(kāi)頭定義了all = test.o,所以test依賴的是test.o,生成test的命令是$(CC) -o test $(all),進(jìn)行變量替換后就是g++ -o test test.o,是一個(gè)我們熟知最基礎(chǔ)的編譯命令。
同理,“目標(biāo)2”test.o依賴的是test.cpp,生成目標(biāo)的命令是g++ -c test.cpp。
上面兩個(gè)規(guī)則完成了從源代碼到可執(zhí)行文件的編譯。
其實(shí)我們直接執(zhí)行g(shù)++ -o test test.cpp就可以生成test了,但這種直接敲命令只適用于代碼文件很少的情況。
即使項(xiàng)目只有5個(gè)文件,每次代碼更新都要敲5個(gè)編譯命令也是很麻煩的。我們只要編寫(xiě)一次makefile,之后每次代碼更新,或者代碼文件有增減,都只需要修改makefile對(duì)應(yīng)的一小部分內(nèi)容,然后執(zhí)行make就行了。
例如test依賴是100個(gè).o文件,在上面的makefile中我們只要寫(xiě)一次all = test.o test1.o test2.o ..... test99.o,就把目標(biāo)test的生成規(guī)則表達(dá)清楚了。當(dāng)然下面要寫(xiě)上100個(gè).o文件的生成規(guī)則。
上面說(shuō)的是按最原始的寫(xiě)法,實(shí)際makefile的編寫(xiě)有很多技巧使得編寫(xiě)量大大減少,編譯命令的各種參數(shù)選項(xiàng)統(tǒng)一都寫(xiě)在變量中,模式匹配,特殊符號(hào)代碼依賴集、目標(biāo)集,shell指令在makefile里完成自動(dòng)查找生成所有文件名,然后替換.cpp為.o的玩法等,都可以大道減少makefile的篇幅。如果打開(kāi)一個(gè)開(kāi)源C++項(xiàng)目的makefile,會(huì)覺(jué)得完全看不懂,就是因?yàn)槔锩娲罅渴褂酶鞣N技巧。但即使我們用最原始辦法也就是第一次編寫(xiě)麻煩一些,之后維護(hù)是很簡(jiǎn)單的,因?yàn)橐粋€(gè)C++項(xiàng)目不會(huì)有頻繁的大的變化。
make默認(rèn)支持makefile和Makefile兩種文件名,所以我們直接執(zhí)行make。如果我們寫(xiě)make規(guī)則的文件叫test20200806,需要執(zhí)行的命令是make -f test20200806。
并行make的命令是make -j。可以加快工程編譯速度,對(duì)于大規(guī)模工程適用。
make會(huì)自動(dòng)推導(dǎo)各個(gè)目標(biāo)的依賴關(guān)系,按照依賴關(guān)系的順序生成目標(biāo)文件。
makefile里的“目標(biāo)3”clear是個(gè)偽目標(biāo),偽目標(biāo)后面無(wú)文件依賴,make不自動(dòng)找文件依賴,無(wú)法執(zhí)行后面的命令。要執(zhí)行偽目標(biāo),就要make+為目標(biāo)名。執(zhí)行make clear,會(huì)執(zhí)行下面的rm命令,這種命令用來(lái)清理項(xiàng)目之前編譯的.o等文件,在需要徹底重新編譯項(xiàng)目時(shí)都會(huì)執(zhí)行這個(gè)命令。

[root@bogon makefiletest]# make clearrm -f *.o test

如果不執(zhí)行make clear清理之前的.o文件,make會(huì)比較.o和.cpp誰(shuí)更新,如果依賴文件cpp更新,重新編譯這個(gè).o,否則不重新編譯。

上述內(nèi)容就是makefile該如何入門(mén),你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

分享名稱:makefile該如何入門(mén)
瀏覽地址:http://chinadenli.net/article12/ihjcdc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)公司、微信小程序、網(wǎng)站內(nèi)鏈、外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管
日韩精品你懂的在线观看| 福利新区一区二区人口| 亚洲国产性生活高潮免费视频| 亚洲欧美中文日韩综合| 亚洲国产欧美精品久久| 婷婷亚洲综合五月天麻豆| 精品人妻少妇二区三区| 亚洲精品国产主播一区| 天堂热东京热男人天堂| 国产精品涩涩成人一区二区三区| 欧美日韩精品一区二区三区不卡| 国产91麻豆精品成人区| 好吊妞视频免费在线观看| 日韩成人高清免费在线| 国产精品成人免费精品自在线观看| 国产麻豆一线二线三线| 亚洲欧美日韩另类第一页| 欧美国产日本高清在线| 国产性色精品福利在线观看| 熟女一区二区三区国产| 中文字幕有码视频熟女| 欧美性高清一区二区三区视频 | 国产在线小视频你懂的| 欧美日韩国产成人高潮| 国产精品久久久久久久久久久痴汉 | 国产午夜精品亚洲精品国产| 日本丁香婷婷欧美激情| 91偷拍与自偷拍精品| 日韩精品一级一区二区| 精品女同在线一区二区| 国产户外勾引精品露出一区| 亚洲一区二区三区四区| 欧美日韩在线第一页日韩| 午夜色午夜视频之日本| 日韩人妻免费视频一专区| 日本加勒比系列在线播放| 丰满人妻一二三区av| 欧美日韩校园春色激情偷拍| 午夜免费精品视频在线看| 日韩一区中文免费视频| 99久久成人精品国产免费|