中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

預定義變量的使用(五)

發布時間:2020-03-03 09:22:47 來源:網絡 閱讀:562 作者:上帝之子521 欄目:系統運維

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

預定義變量的使用(五)

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

.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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东城区| 吉安县| 奇台县| 德昌县| 扶绥县| 黄平县| 深水埗区| 临朐县| 舞阳县| 岫岩| 内黄县| 古浪县| 潢川县| 开江县| 商都县| 内乡县| 博罗县| 大渡口区| 元氏县| 锡林郭勒盟| 栾城县| 保德县| 六枝特区| 陵水| 洛宁县| 沿河| 江川县| 青冈县| 琼中| 太仆寺旗| 巴塘县| 青海省| 宝清县| 新晃| 聂拉木县| 报价| 静宁县| 连城县| 迁西县| 龙岩市| 蓬溪县|