91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

預定義變量的使用(五)

發布時間: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

潮安县| 远安县| 德惠市| 佛学| 雅安市| 邵武市| 玛纳斯县| 寿宁县| 张家界市| 开原市| 东方市| 瓦房店市| 偃师市| 那坡县| 嘉义县| 山丹县| 克东县| 张家港市| 新蔡县| 沈丘县| 万安县| 河曲县| 静安区| 高碑店市| 乌兰浩特市| 鸡东县| 湾仔区| 盐亭县| 松原市| 什邡市| 突泉县| 平南县| 周宁县| 德昌县| 鄂托克旗| 梧州市| 昭苏县| 临邑县| 仁寿县| 包头市| 休宁县|