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

溫馨提示×

溫馨提示×

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

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

條件判斷語句(七)

發布時間:2020-05-27 10:25:23 來源:網絡 閱讀:786 作者:上帝之子521 欄目:系統運維

        我們之前說過 makefile 是一種腳本語言程序,那么程序便會有相應的語法。在 makefile 中支持條件判斷語句,可以根據條件的值來決定 make 的執行,也可以比較兩個不同變量或者變量和常量值。需要注意的是:條件判斷語句只能用于控制 make 實際執行的語句;但是,不能控制規則中命令的執行過程。格式如下

條件判斷語句(七)

        條件判斷語句的語法如下

條件判斷語句(七)

        那么在 makefile 中都有哪些的條件判斷關鍵呢?

關鍵字
功能
ifeq
判斷參數是否相等,相等為 true,否則為 false
ifneq
判斷參數是否不相等,不相等為 true,否則為 false
ifdef
判斷變量是否有值,有值為 true,否則為 false
ifndef
判斷變量是否沒有值,沒有值為 true,否則為 false

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

.PHONY : test

var1 := A
var2 := $(var1)
var3 :=

test : 
    ifeq ($(var1),$(var2))
        @echo "var1 == var2"
    else
        @echo "var1 != var2"
    endif

    ifneq ($(var2),)
        @echo "var2 is NOT empty"
    else
        @echo "var2 is empty"
    endif

    ifdef var2
        @echo "var2 is NOT empty"
    else
        @echo "var2 is empty"
    endif

    ifndef var3
        @echo "var3 is empty"
    else
        @echo "var3 is NOT empty"
    endif

        我們來看看編譯結果

條件判斷語句(七)

        我們看到編譯出錯了,原因就是因為 ifeq 是規則而不是命令,所以它前面一定是空格而不是 Tab 鍵。下來我們換成空格來看看

條件判斷語句(七)

        我們看到編譯已經通過了,而且也正常運行結束。變量 var2 就取的是 變量 var1 的值,因此在第一個它們的比較相等時肯定會輸出相等;第二個用 var2 和空字符進行比較,那么 var2 肯定不為空;第三個就直接用 ifdef 關鍵字來進行判斷 var2 是否存在了;最后一個 var3 肯定為空了。根據一些前輩們的經驗,總結以下的幾條規則:a> 條件判斷語句之前可以有空格,但不能有 Tab 字符('\t');b> 在條件語句中不要使用自動變量($@,$^,$<);c> 一條完整的條件語句必須位于同一個 makefile 中;d> 條件判斷類似于 C 語言中的宏,預處理階段有效,執行階段無效;e> make 在加載 makefile 時,首先計算表達式的值(賦值方式不同,計算方式不同),根據判斷語句的表達式決定執行的內容。

        那么我們來看看下面的代碼輸出相同嗎?

.PHONY : te

var1 := 
var2 := $(var1)

var3 = 
var4 = $(var3)

test : 
    ifdef var1
        @echo "var1 is defined"
    else
        @echo "var1 is NOT defined"
    endif
    
    ifdef var2
        @echo "var2 is defined"
    else
        @echo "var2 is NOT defined"
    endif

    ifdef var3
        @echo "var3 is defined"
    else
        @echo "var3 is NOT defined"
    endif
    
    ifdef var4
        @echo "var4 is defined"
    else
        @echo "var4 is NOT defined"
    endif

        我們看著兩個沒啥差別,結果應該是一樣的,都是輸出的是空的。我們來看看編譯結果

條件判斷語句(七)

        那么我們看到前三個是空的,var4 竟然不為空。我們來仔細看下,在 var1 和 var2 的定義中都是直接賦值(:=);而 var3 和 var4 是遞歸賦值(=)。在編譯器看來 var4 是有值的,只不過在編譯階段不確定它的值究竟是什么而已。我們在下面加上 var3 = A,給 var3 一個具體的值,試試看效果是不是一樣的。

條件判斷語句(七)

        效果是一樣的。因此我們在 makefile 中不推薦遞歸賦值的這種寫法,容易造成誤解。通過對條件判斷語句的學習,總結如下:1、條件判斷根據條件的值來決定 make 的執行;2、條件判斷可以比較兩個不同變量或者變量和常量值;3、條件判斷再預處理階段有效,執行階段無效;4、條件判斷不能控制規則中命令的執行過程。

向AI問一下細節

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

AI

文山县| 峡江县| 花垣县| 宁城县| 明光市| 红桥区| 隆化县| 民丰县| 宁乡县| 天气| 文昌市| 莱西市| 武安市| 广州市| 文水县| 铜陵市| 安顺市| 乌兰县| 永昌县| 大同县| 息烽县| 四川省| 若尔盖县| 武隆县| 鄂州市| 泰宁县| 友谊县| 车险| 台山市| 溧水县| 饶平县| 石狮市| 梁河县| 宁化县| 万山特区| 桐柏县| 巴楚县| 龙泉市| 桂林市| 金昌市| 将乐县|