GNU Make(3) - 假工作目標(phony target)、空工作目標(empty target)、自動變數(automatic variable)專有名詞說明:target: 工作目標prerequisites: 必要條件phony target: 假工作目標empty target: 空工作目標automatic variable: 自動變數節能燈具phony target=> 任何不代表檔案的target,例如常見到的clean。假設make 有以下的內容clean: rm -f *.o 此時make總是會執行clean的這個內容,因為clean這個檔案總是不存在。但如果這時剛好資料夾內有一個叫clean的檔案,就可能會產酒店經紀生以下的內容:$make cleanmake: 'clean' is up to date.這是因為,clean裡面沒有prerequisites,所以clean這個target總是會被視為已更新,故相應的command永遠不會執行。為了防止這個問題,GNU make 提供了一個方法,就是加上 會場佈置.PHONY。加上這個是用來告訴make,該target不是一個真正的檔案。我們將上述改成以下的內容:.PHONY: cleanclean: rm -f *.o加上.PHONY還有另一個好處,就是優化效能,因為make此時就不會該處理一般的規則那樣,從原始檔案來建造以ARMANItarget為名的檔案,而會優化它的一般規則搜尋程序,達到改進效能的目的。empty target=>類似phony target,並且總是會使得它們的依存對象(target所關連到的prerequisites)被重建。參考以下這個例子:prog: size prog.o $(CC) 烤肉食材$(LDFLAG) -o $@ $^ size: prog.o size $^ touch size這個size就是一個空工作目標,只有當prog.o更新後,才會執行size規則。可以用來執行一些當我們想要在prog.o被更新時才執行的工作。automatic variable=>當規則相符時,make結婚西裝會設定自動變數,也就是說自動變數是在必要條件成立後才執行的,所以它只能應用在規則中的commands部分。下面是7個核心的自動變數$@ 工作目標的檔名$% 程式庫成員(archive member) 結構中的文件名元素。$< 房屋貸款 第一個必要條件的檔名$? 時間戳記在工作目標之後的所有必要條件,並以空格隔開這些必要條件$^ 所有必要條件的檔名,不包括重複的檔名。$+ 所有必要條件的檔名, 包括重複的檔名。$* 工作目標節能燈具的主檔名。以上一篇的例來看的話,可改成以下的內容:1 # A basic makefile for "test"2 CC = g++34 test: main.o func.o 5 $(CC) -o $@ $^67 main.o: main.cpp func.h8 $(CC) -c $<9 10 func.o: func.cpp ARMANIfunc.h11 $(CC) -c $<執行的效果是一樣的,但是可減少許多輸入,也就是降低重覆輸入的麻煩和可能帶來的錯誤及維謢上的困難。


.msgcontent .wsharing ul li { text-indent: 0; }



分享

Facebook
商務中心Plurk
YAHOO!

arrow
arrow
    全站熱搜

    cf01cftktg 發表在 痞客邦 留言(0) 人氣()