預定義變量的使用(五)-創新互聯

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

我們提供的服務有:成都網站設計、網站建設、微信公眾號開發、網站優化、網站認證、馬邊彝族ssl等。為數千家企事業單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的馬邊彝族網站制作公司

預定義變量的使用(五)

        下來我們以代碼為例來進行分析說明

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

        看看編譯結果

預定義變量的使用(五)

    我們看到和我們之前解釋的是一樣的。$@便是打印我們的目標名,$^ 打印的便是依賴條件,$< 打印的是依賴當中的第一個。那么我們就可以將之前寫的 makefile 進行改寫了

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)

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

預定義變量的使用(五)

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

        下來我們還是以代碼為例來進行說明

.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

        我們來看看編譯效果

預定義變量的使用(五)

        我們第一次直接 make 的時候,因為當前解釋器是 make ,所以會直接打印 make,命令行后面沒帶參數,因此第二行是空的,最后一行是因為只有一個 makefile,但是在它前面會有一個空格。第二次 make all 的時候,因為命令行的參數為 all,所以第二行會輸出 all。第三次 make test 的時候,因為需要進行三次 MAKE,所以會有三次進入到對應目錄下進行進行 make 命令。第四次 make all out 的時候,在執行 all 的時候分別打印一次,在執行 out 的時候再次會打印一次。

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

        還是以代碼為例來進行說明

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

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

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

        歡迎大家一起來學習 makefile,可以加我QQ:243343083。

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

網站標題:預定義變量的使用(五)-創新互聯
文章鏈接:http://m.kartarina.com/article36/didhsg.html

成都網站建設公司_創新互聯,為您提供關鍵詞優化虛擬主機靜態網站網站維護搜索引擎優化定制開發

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

營銷型網站建設
主站蜘蛛池模板: 中文字幕av无码一二三区电影| 人妻丰满熟妇AV无码区| 无码av人妻一区二区三区四区| 野花在线无码视频在线播放| 日韩精品久久无码人妻中文字幕| 无码乱肉视频免费大全合集| 狠狠精品久久久无码中文字幕| 无码人妻精品一区二区三区66| 亚洲AV无码XXX麻豆艾秋| 亚洲av无码国产精品夜色午夜| 亚洲Av永久无码精品一区二区| 波多野结衣AV无码久久一区| 18禁无遮挡无码网站免费| 无码乱人伦一区二区亚洲| 无码人妻久久一区二区三区蜜桃 | 亚洲AV无码成人精品区狼人影院| 国产高清不卡无码视频| 精品无码av一区二区三区| 亚洲精品无码午夜福利中文字幕| 无码少妇丰满熟妇一区二区| 未满十八18禁止免费无码网站| 亚洲精品无码mv在线观看网站 | 国产在线无码精品无码| 6080YYY午夜理论片中无码| 亚洲av永久无码精品表情包| 亚洲Av无码国产情品久久| 亚洲av午夜国产精品无码中文字| 无码无遮挡又大又爽又黄的视频 | 无码人妻精品一区二区| 狠狠躁天天躁中文字幕无码 | 国产精品无码一区二区在线观一| 亚洲av无码不卡久久| 亚洲的天堂av无码| 久久久久亚洲AV无码永不| 无码精品久久久天天影视 | 亚洲AV无码一区二区一二区| 日韩AV无码中文无码不卡电影| 日韩人妻无码一区二区三区99 | 特级无码a级毛片特黄| 无码一区二区波多野结衣播放搜索| 少妇人妻偷人精品无码视频|