預(yù)定義變量的使用(五)-創(chuàng)新互聯(lián)

        在 makefile 中存在一些預(yù)定義的變量,如自動(dòng)變量$@,$^,$<等;還有一些特殊變量,如:$(MKAE),$(MAKECMDGOALS),$(MKAEFILE_LIST),$(MAKE_VERSION),$(CURDIR),$(.VARIABLES)等。下來我們先來解釋下自動(dòng)變量的意義:a> $@ 是指當(dāng)前規(guī)則中觸發(fā)命令被執(zhí)行的目標(biāo);b> $^ 是指當(dāng)前規(guī)則中的所有依賴;c> $< 是指當(dāng)前規(guī)則中的第一個(gè)依賴。關(guān)于自動(dòng)變量的使用如下

我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、馬邊彝族ssl等。為數(shù)千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的馬邊彝族網(wǎng)站制作公司

預(yù)定義變量的使用(五)

        下來我們以代碼為例來進(jìn)行分析說明

.PHONY : all first second third all : first second third     @echo "\$$@ => $@"     @echo "$$^ => $^"     @echo "$$< => $<" first: second: third:

        看看編譯結(jié)果

預(yù)定義變量的使用(五)

    我們看到和我們之前解釋的是一樣的。$@便是打印我們的目標(biāo)名,$^ 打印的便是依賴條件,$< 打印的是依賴當(dāng)中的第一個(gè)。那么我們就可以將之前寫的 makefile 進(jìn)行改寫了

CC := g++ TARGET := hello.out $(TARGET) : func.o main.o     $(CC) -o $@ $^ func.o : func.c      $(CC) -o $@ -c $^ main.o : main.c     $(CC) -o $@ -c $^ .PHONY : rebuild clean all rebuild : clean all all : $(TARGET)      clean :      rm *.o $(TARGET)

        我們來看看編譯結(jié)果是否和之前的一樣的。

預(yù)定義變量的使用(五)

        我們看到和之前的效果是一樣的,那么這樣做的好處是什么呢?在大型的項(xiàng)目中,我們后面難免會(huì)進(jìn)行新功能的開發(fā),那么此時(shí)寫的新文件便可以海子街放在目標(biāo)之后,其他的不用管就OK了,這樣就非常方便。
        下來我們來看看那些特殊變量的含義:a> $(MAKE) 是指當(dāng)前 make 解釋器的文件名;b>$(MAKECMDGOALS) 是指命令行中指定的目標(biāo)名(make 的命令行參數(shù));c>$(MAKEFILE_LIST) 指 make 所需要處理的 makefile 文件列表,當(dāng)前 makefile 的文件名總是位于列表的最后,文件名之間以空格進(jìn)行分隔。

        下來我們還是以代碼為例來進(jìn)行說明

.PHONY : all out first second third test all out :     @echo "$(MAKE)"     @echo "$(MAKECMDGOALS)"     @echo "$(MAKEFILE_LIST)" first :     @echo "first" second :     @echo "second" third :     @echo "third" test :     @$(MAKE) first     @$(MAKE) second     @$(MAKE) third

        我們來看看編譯效果

預(yù)定義變量的使用(五)

        我們第一次直接 make 的時(shí)候,因?yàn)楫?dāng)前解釋器是 make ,所以會(huì)直接打印 make,命令行后面沒帶參數(shù),因此第二行是空的,最后一行是因?yàn)橹挥幸粋€(gè) makefile,但是在它前面會(huì)有一個(gè)空格。第二次 make all 的時(shí)候,因?yàn)槊钚械膮?shù)為 all,所以第二行會(huì)輸出 all。第三次 make test 的時(shí)候,因?yàn)樾枰M(jìn)行三次 MAKE,所以會(huì)有三次進(jìn)入到對(duì)應(yīng)目錄下進(jìn)行進(jìn)行 make 命令。第四次 make all out 的時(shí)候,在執(zhí)行 all 的時(shí)候分別打印一次,在執(zhí)行 out 的時(shí)候再次會(huì)打印一次。

        下來我們來繼續(xù)看看另一些特殊變量的含義:a> $(MAKE_VERSION) 是指當(dāng)面 make 解釋器的版本;b> $(CURDIR) 是指當(dāng)前 make 解釋器的工作目錄;c> $(.VARIABLES) 是指所有已經(jīng)定義的變量名列表(預(yù)定義變量和自定義變量)。

        還是以代碼為例來進(jìn)行說明

.PHONY : test1 test2 TDelphi := Delphi Tang D.T.Software := D.T. test1 :     @echo "$(MAKE_VERSION)"     @echo "$(CURDIR)"     @echo "$(.VARIABLES)" test2 :     @echo "$(RM)"

        我們來看看編譯效果預(yù)定義變量的使用(五)

        我們看到直接 make 的時(shí)候,執(zhí)行的是 test1 目標(biāo),先是打印當(dāng)前 make 的版本,接著是當(dāng)前目錄,然后是當(dāng)前的環(huán)境變量。我們?cè)谙旅嬗?make -v 直接看到當(dāng)前 make 解釋器的版本就是 3.81,而且當(dāng)前目錄就是 /mnt/hgfs/winshare/mentu/make1/5 。接著我們看到了我們自己定義的兩個(gè)環(huán)境變量。接下來在執(zhí)行 make test2,看到 RM 其實(shí)就是 rm -f,就是強(qiáng)制刪除的符號(hào),我們是不是就可以在前面定義的 makefile 中將 rm -f 全部替換為 $(RM) 呢。通過對(duì) makefile 中的預(yù)定義變量的學(xué)習(xí),總結(jié)如下:1、makefile 提供了預(yù)定義變量供開發(fā)者使用;2、預(yù)定義變量的使用能夠使得 makefile 的開發(fā)更高效;3、自動(dòng)變量是 makefile 中最常見的元素;4、使用 $(.VARIABLES) 能夠獲取所有的特殊變量。

        歡迎大家一起來學(xué)習(xí) makefile,可以加我QQ:243343083。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)站標(biāo)題:預(yù)定義變量的使用(五)-創(chuàng)新互聯(lián)
文章鏈接:http://bm7419.com/article36/didhsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化虛擬主機(jī)、靜態(tài)網(wǎng)站、網(wǎng)站維護(hù)、搜索引擎優(yōu)化定制開發(fā)

廣告

聲明:本網(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í)需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)