【Scripts系列】之Makefile中條件分支ifeq/else/endif/else ifeq/ifneq/ifdef/ifndef用法詳解


DATE: 2019-2-22


前言

      條件分支的用法在任何編程語言和腳本以及邏輯中都廣泛使用。前文講述過C語言中預處理的條件編譯#ifdef/#if/#elif/#else/#endif用法詳解,本文重點講述Makefile編譯腳本中條件分支ifeq/else/endif/else ifeq/ifneq/ifdef/ifndef的具體用法。

1、參考

https://blog.csdn.net/turkeyzhou/article/details/8613589
https://blog.csdn.net/u010312436/article/details/52459609
https://blog.csdn.net/tanyjin/article/details/66970155
https://blog.csdn.net/kwinway/article/details/79980616

2、Makefile中條件分支的不同使用形式

    使用條件判斷,可以讓make根據運行時的不同情況選擇不同的執行分支。條件表達式可以是比較變量的值,或是比較變量和常量的值。

2.1、基本語法

條件表達式的語法為:

    <conditional-directive>; 
    <text-if-true>; 
    endif 

以及: 

    <conditional-directive>; 
    <text-if-true>; 
    else 
    <text-if-false>; 
    endif 

其中<conditional-directive>;表示條件關鍵字,如“ifeq”。這個關鍵字有四個,如下:

形式一:

ifeq(<arg1>, <arg2>)
語句1
else
語句2
endif

或者:

ifeq(<arg1>, <arg2>)
語句1
else ifeq(<arg3>, <arg4>)
語句2
else
語句3
endif

注意:其中<argv1>和<arg3>可以是make變量,比如$(PLATFORM)

形式二:

ifneq(<arg1>, <arg2>)
語句1
else
語句2
endif

形式三:

ifdef  <variable-name>
語句1
endif

注意,ifdef只是測試一個變量是否有值,其並不會把變量擴展到當前位置。

形式四:

ifndef  <variable-name>
語句1
endif
2.2、多條件使用:單分支多個宏變量組合
ifeq ($(PLATFORM), $(findstring) $(PLATFORM), linux x86 android ios)
語句1
endif
3、ifdef, ifeq 使用及辨析
#可以用命令行傳遞變量
RELEASE = abc

#ifdef 變量名稱不能加$()
ifdef RELEASE
$(warning RELEASE defined)
else
$(warning RELEASE not defined)
endif

#ifeq 后面參數要叫$(), 因為是值引用, 值可以為數值或字符串
ifeq ($(RELEASE),abc)
$(warning RELEASE eqal abc)
else
$(warning RELEASE not equal abc)
endif

all:
    @echo ok!

THE END!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM