老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

變量和不同的賦值方式(四)

        在 makefile 中是支持程序設計語言中變量的概念的,makefile 中的變量只代表文本數據(字符串)。那么在 makefile 中的變量名的規則又有哪些呢?a> 變量名可以包含字符、數字以及下劃線;b> 不能包含 ":" , "#" , "=" 或 " ";c> 變量名大小寫敏感。下來我們來看看變量的定義和使用,如下

創新互聯建站專注于企業營銷型網站、網站重做改版、開平網站定制設計、自適應品牌網站建設、H5高端網站建設商城網站建設、集團公司官網建設、外貿營銷網站建設、高端網站制作、響應式網頁設計等建站業務,價格優惠性價比高,為開平等各大城市提供網站開發制作服務。

變量和不同的賦值方式(四)

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

CC := gcc
TARGET := hello.out

$(TARGET) : func.o main.o
    $(CC) -o $(TARGET) func.o main.o

func.o : func.c 
    $(CC) -o func.o -c func.c

main.o : main.c
    $(CC) -o main.o -c main.c

.PHONY : rebuild clean all

rebuild : clean all

all : $(TARGET)
    
clean : 
    rm *.o $(TARGET)

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

變量和不同的賦值方式(四)

        效果和之前是一樣的,那么我們為何這樣定義變量呢?在一些大型的工程項目中,我們可能要編譯好幾個版本,因此定義不同的 TARGET 便會編譯出不同的版本。而且這種方法還有個好處就是編譯器可以由我們自定義選擇,比如我們將上面的 gcc 編譯器換成 g++,則只需將 CC := gcc 換成 CC := g++,下來我們來看看編譯效果

變量和不同的賦值方式(四)

        我們看到編譯器已經換為 g++ 了。下來我們來講講 makefile 中變量的賦值方式,分為四種:a> 簡單賦值(:=);b> 遞歸賦值(=);c> 條件賦值(?=);d> 追加賦值(+=)。那么不同的賦值方式其意義是不同的!下來我們來對這四種賦值方式進行一一的解釋說明

        a> 簡單賦值(:=):程序設計語言中的通用的賦值方式,只針對當前語句的變量是有效的。其用法如下

變量和不同的賦值方式(四)

        b> 遞歸賦值(=):賦值操作可能影響多個其他變量,所有與目標變量相關的其他變量都將受到影響。其用法如下

變量和不同的賦值方式(四)

        c> 條件賦值(?=):如果變量未定義,使用賦值符號中的值定義變量;如果變量已經定義,則賦值無效。其用法如下

變量和不同的賦值方式(四)

        d> 追加賦值(+=):原變量值之后加上一個新值,原變量值與新值之間由空格隔開。其用法如下

變量和不同的賦值方式(四)

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

# ex1 (:=)
x := foo
y := $(x)b
x := new

.PHONY : test

test :
    @echo "# ex1 (:=)"
    @echo "x => $(x)"
    @echo "y => $(y)"

        經過簡單賦值后,x 就為 new 了,而 y 則應該為 foob。我們來看看編譯效果

變量和不同的賦值方式(四)

        我們看到結果和我們所分析的是一樣的。下來我們來看看遞歸賦值

# ex2 (=)
x = foo
y = $(x)b
x = new

.PHONY : test

test :
    @echo "# ex2 (=)"
    @echo "x => $(x)"
    @echo "y => $(y)"

        我們分析下,因為遞歸賦值是與目標相關的其他變量都會受到影響,那么 x 最后應該為 new,y 就應該為 newb。我們來看看編譯結果

變量和不同的賦值方式(四)

        為了更加形象對遞歸賦值進行說明,我們編寫代碼如下

a = $(b)
b = $(c)
c = hello-makefile

.PHONY : test

test :
    @echo "# ex2 (=)"
    @echo "x => $(x)"
    @echo "y => $(y)"
    @echo "a => $(a)"
    @echo "b => $(b)"
    @echo "c => $(c)"

        我們定義 a 依賴于 b,而 b 依賴于 c。此時 c 為 hello-makefile,那么依賴于它的 b 也就變為 hello-makefile 了,此時依賴于 b 的 a 也就變為 hello-makefile 了。x 和 y 此時沒定義,看看編譯會報錯嗎?

變量和不同的賦值方式(四)

        編譯是通過的,證明在 makefile 中是支持這樣的寫法的,x 和 y 沒定義,自然也就為空了。那么 a,b,c 和我們所分析的是一樣的。所以在 makefile 中我們一般是很少直接用遞歸賦值的,因為有可能會意想不到地改變依賴于它的目標。下來我們來看看條件賦值

# ex3 (?=)
x := foo
y := $(x)b
x ?= new

.PHONY : test

test :
    @echo "# ex3 (?=)"
    @echo "x => $(x)"
    @echo "y => $(y)"

        我們在最后對 x ?= new,意思是如果前面沒定義的話,此時它便為 new。所以 x 最后應該為 foo,y 就應該為 foob。我們來看看編譯結果

變量和不同的賦值方式(四)

        結果確實是這樣的,一般我們會在新定義變量時采用這樣的寫法,以防止改變之前定義時的語義。最后看看追加賦值

# ex4 (+=)
x := foo
y := $(x)b
x += new

.PHONY : test

test :
    @echo "# ex4 (+=)"
    @echo "x => $(x)"
    @echo "y => $(y)"

        根據追加賦值的定義,它是直接在后面加上,但是有一個空格。所以 x 最后應該為 foo new,y 就應該為 foob。我們來看看編譯結果

變量和不同的賦值方式(四)

        我們看懂啊效果確實是這樣的,通過對四種賦值方式的學習,我們發現簡單賦值是跟 C 語言中是一樣的。追加賦值和 C++ 語言中的語義也是一樣的,一般在大型項目中是不會采用遞歸賦值這種寫法的。

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


本文名稱:變量和不同的賦值方式(四)
當前鏈接:http://www.xueling.net.cn/article/gjjdge.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 字幕网91 | 国产精品禁久久精品 | 午夜无遮挡男女啪啪免费软件 | www.草逼.com | 久久精品亚洲乱码伦伦中文 | 性一爱一乱一交一视频 | 日韩精品视频免费看 | 中文字幕视频免费在线观看 | 簧片在线观看 | 成人免费毛片立即播放 | 一区二区三国产 | 精品人妻无码一区二区三区毛片 | 日本老女人视频 | 精品中文字幕在线2019 | 日韩精品成人 | 91精品一区二区三区在线 | 欧美人与动人物牲交免费观看久久 | 国产日韩在线免费观看 | 黄色视频网站在线观看免费 | 天天爽夜夜骑 | 粉嫩av淫片一区二区三区 | 亚洲AV中文无码乱人伦在线观看 | 国产色婷婷久久99精品91 | 国产AV旡码专区亚洲AV苍井空 | 免费a在线看 | 亚洲国产一区精品 | 亚洲天堂2020 | 国产特黄色片 | 精品国产98久久久久久 | 亚洲综合精品香蕉久久网97 | 精品区一区二 | 免费av不卡在线观看 | 高潮绝顶抽搐大叫久久精品 | 日本最新中文字幕 | 国产福利一区视频 | 国产午夜片无码区在线观看 | 成人毛片无码一区二区 | 日韩在线精品一区 | 红杏亚洲影院一区二区三区 | 91麻豆精品国产91久久久久久久 | 久久一区91 |