makefile中的條件判斷ifeq、ifneq、ifdef
一、示例
下面的例子,判斷$(CC)變數是否“gcc”,如果是的話,則使用GNU函式編譯目標。
libs_for_gcc = -lgnu
normal_libs =
foo: $(objects)
ifeq ($(CC),gcc)
$(CC) -o foo $(objects) $(libs_for_gcc)
else
$(CC) -o foo $(objects) $(normal_libs)
endif
可見,在上面示例的這個規則中,目標“foo”可以根據變數“$(CC)”值來選取不同的函式庫來編譯程式。
我們可以從上面的示例中看到三個關鍵字:ifeq、else和endif。ifeq的意思表示條件語句的開始,並指定一個條件表示式,表示式包含兩個引數,以逗號分隔,表示式以圓括號括起。else表示條件表示式為假的情況。endif表示一個條件語句的結束,任何一個條件表示式都應該以endif結束。
當我們的變數$(CC)值是“gcc”時,目標foo的規則是:
foo: $(objects)
$(CC) -o foo $(objects) $(libs_for_gcc)
而當我們的變數$(CC)值不是“gcc”時(比如“cc”),目標foo的規則是:
foo: $(objects)
$(CC) -o foo $(objects) $(normal_libs)
當然,我們還可以把上面的那個例子寫得更簡潔一些:
libs_for_gcc = -lgnu
normal_libs =
ifeq ($(CC),gcc)
libs=$(libs_for_gcc)
else
libs=$(normal_libs)
endif
foo: $(objects)
$(CC) -o foo $(objects) $(libs)
二、語法
條件表示式的語法為:
<conditional-directive>;
<text-if-true>;
endif
以及:
<conditional-directive>;
<text-if-true>;
else
<text-if-false>;
endif
其中<conditional-directive>;表示條件關鍵字,如“ifeq”。這個關鍵字有四個。
第一個是我們前面所見過的“ifeq”
ifeq (<arg1>;, <arg2>;)
ifeq '<arg1>;' '<arg2>;'
ifeq "<arg1>;" "<arg2>;"
ifeq "<arg1>;" '<arg2>;'
ifeq '<arg1>;' "<arg2>;"
比較引數“arg1”和“arg2”的值是否相同。當然,引數中我們還可以使用make的函式。如:
ifeq ($(strip $(foo)),)
<text-if-empty>;
endif
這個示例中使用了“strip”函式,如果這個函式的返回值是空(Empty),那麼<text-if-empty>;就生效。
第二個條件關鍵字是“ifneq”。語法是:
ifneq (<arg1>;, <arg2>;)
ifneq '<arg1>;' '<arg2>;'
ifneq "<arg1>;" "<arg2>;"
ifneq "<arg1>;" '<arg2>;'
ifneq '<arg1>;' "<arg2>;"
其比較引數“arg1”和“arg2”的值是否相同,如果不同,則為真。和“ifeq”類似。
第三個條件關鍵字是“ifdef”。語法是:
ifdef <variable-name>;
如果變數<variable-name>;的值非空,那到表示式為真。否則,表示式為假。當然,<variable-name>;同樣可以是一個函式的返回值。注意,ifdef只是測試一個變數是否有值,其並不會把變數擴充套件到當前位置。還是來看兩個例子:
示例一:
bar =
foo = $(bar)
ifdef foo
frobozz = yes
else
frobozz = no
endif
示例二:
foo =
ifdef foo
frobozz = yes
else
frobozz = no
endif
第一個例子中,“$(frobozz)”值是“yes”,第二個則是“no”。
第四個條件關鍵字是“ifndef”。其語法是:
ifndef <variable-name>;
這個我就不多說了,和“ifdef”是相反的意思。
在<conditional-directive>;這一行上,多餘的空格是被允許的,但是不能以[Tab]鍵做為開始(不然就被認為是命令)。而註釋符“#”同樣也是安全的。“else”和“endif”也一樣,只要不是以[Tab]鍵開始就行了。
特別注意的是,make是在讀取Makefile時就計算條件表示式的值,並根據條件表示式的值來選擇語句,所以,你最好不要把自動化變數(如“[email protected]”等)放入條件表示式中,因為自動化變數是在執行時才有的。
而且,為了避免混亂,make不允許把整個條件語句分成兩部分放在不同的檔案中。
相關推薦
makefile中的條件判斷ifeq、ifneq、ifdef
使用條件判斷,可以讓make根據執行時的不同情況選擇不同的執行分支。條件表示式可以是比較變數的值,或是比較變數和常量的值。 一、示例 下面的例子,判斷$(CC)變數是否“gcc”,如果是的話,則使用GNU函式編譯目標。 libs_for_gcc = -lgnu
make條件判斷ifeq,ifneq,ifdef,ifndef
使用條件判斷,可以讓make根據執行時的不同情況選擇不同的執行分支。條件表示式可以是比較變數的值,或是比較變數和常量的值。 一、示例 下面的例子,判斷$(CC)變數是否“gcc”,如果是的話,則使用GNU函式編譯目標。 libs_for_gcc = -lgnu
Shell中條件判斷語法與判斷條件
expression 表達式 字符串 linux 影響 一,簡介Shell各種判斷結構和運算符的用法是shell編程的基礎,了解shell的判斷、運算符和一些退出狀態對後面的學習有很重要的影響。shell有一個內部命令test經常用於對判斷語句進行測試一種或幾種狀態的條件是否成立二. 判斷
跟我一起寫Makefile:使用條件判斷
轉載: 使用條件判斷 使用條件判斷,可以讓make根據執行時的不同情況選擇不同的執行分支。條件表示式可以是比較變數的值,或是比較變數和常量的值。 示例 下面的例子,判斷$(CC)變數是否“gcc”,如果是的話,則使用GNU函式編譯目標。 libs_for_gcc
makefile中如何判斷一個檔案是否存在
轉載:http://blog.csdn.net/qiaoliang328/article/details/7568141makefile判斷檔案存在如下的兩種方法:1. 呼叫shell的函式進行判斷exist = $(shell if [ -f $(FILE) ]; then
makefile(五):makefile的條件判斷與迴圈
如果說任何程式都可以由順序,分支,迴圈來組成的話,前面介紹的相當於順序部分,本部分介紹分支和迴圈 makefile的條件判斷和迴圈非常簡單。 一.條件判斷 條件判斷的語法如下: ifeq (條件表示式) 執行體 endif ifeq (條
從頭開始寫專案Makefile(六):引數傳遞、條件判斷、include
在多個Makefile巢狀呼叫時,有時我們需要傳遞一些引數給下一層Makefile。比如我們在頂層Makefile裡面定義的開啟除錯資訊變數DEBUG_SYMBOLS,我們希望在進入子目錄執行子Makefile時該變數仍然有效,這是需要將該變數傳遞給子Makefile,那怎麼傳遞呢?這裡有兩種方法:
Python中的條件判斷、迴圈以及迴圈的終止
條件判斷 條件語句是用來判斷給定條件是否滿足,並根據判斷所得結果從而決定所要執行的操作,通常的邏輯思路如下圖; 單次判斷 形式 if <判斷條件>: <執行> els
C/C++中的結束輸入條件判斷 (scanf、EOF、getchar()、cin.get()、getline)
本教程主要適用於一些程式比賽或大公司機試中的輸入資料的處理,總的來說,可以分為以下三種情況: 情況一:輸入的測試樣例有多組,每組需要相同邏輯的處理; 處理方案:在C語言中可利用scanf("%d",&n)!=EOF,在C++中可以使用while(cin>&g
15、自學——Linux的學習進度與任務【bash編程之條件判斷】
腳本執行 命令替換 返回 引用 任務 邏輯 與運算 腳本編程 num bash編程之條件判斷 bash編程之條件判斷:判定後續操作的前提條件是否滿足 1、條件判斷的常用判斷類型(bash內生的): 整數測試
MVC中構建Linq條件、排序、Selector字段過濾
ssi mvc bsp 分別是 fun clas div lin con 代碼: System.Linq.Expressions.Expression<Func<Domain.S_ROLE, bool>> expressWhere1 = (c =&
46、求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。
closed else while spl 判斷語句 stat 條件 執行 ret 思路:循環或者遞歸都有個結束條件和執行條件。用&&短路與代替。 //短路與&&;就是只有前一個條件滿足才可以去判斷第二個條件。 //遞歸的出口
Java關於條件判斷練習--統計一個src文件下的所有.java文件內的代碼行數(註釋行、空白行不統計在內)
stat 註釋 string 字符 條目 pub isf exc system 要求:統計一個src文件下的所有.java文件內的代碼行數(註釋行、空白行不統計在內) 分析:先封裝一個靜態方法用於統計確定的.java文件的有效代碼行數。使用字符緩沖流讀取文件,首先判斷是
makefile中=、:=和+=的區別
有感 分析 eight c語言 區別 all ont 總結 mil 經常有人分不清= 、:=和+=的區別 這裏我總結下做下詳細的分析: 首先你得清楚makefile的運行環境,因為我是linux系統,那麽我得運行環境是shell 在Linux的shell裏,shell
hive數據類型轉換、字符串函數、條件判斷
string decimal tails clas sele 我們 浮點 ngs ble http://blog.csdn.net/yimingsilence/article/details/70057638 數據類型轉換 同Java語言一樣,Hive也包括 隱式
vue中根據手機類型判斷是安卓、微信或IOS跳轉相應下載頁面
nload tor js代碼 roi agen 按鈕 path his cati 按鈕:<div class="download" @click="downApp">立即下載</div> 遮罩層:<div class="dark" v-show
二、Python基礎---循環--條件判斷(while-for-if-elif-else)
Python基礎---循環--條件判斷!!!語句!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1.代碼實例: #if語句#!/usr/bin/python3#_*_coding:utf-8_*_num = 10if num == 10: pri
條件判斷語句:文件、數值、字符串
shell 條件 測試 可以用test或者[]測試一個條件是否成立,如果測試結果為真,則該命令退出狀態為0,如果為假,狀態為1文件測試格式:test option file 或者[ option file ]-b file 塊文件-c file 字符文件-d file 目錄-e fi
shell(1)介紹、腳本結構和執行、date命令、腳本中的變量、腳本中邏輯判斷、文件目錄屬性判斷
shell語法 一、shell腳本介紹我自定的shell腳本基本是放在/usr/local/sbin/目錄下。 二、Shell腳本結構和執行腳本命令:bash +腳本文件路徑sh +腳本文件路徑查看腳本執行過程-x :bash -x 1.sh查看腳本是否語法
復習python(條件判斷、循環、字符串格式化)
語句塊 有一種 str 條件 字符串格式化 %s 循環 color username 1、條件判斷: 只有一種 if: *** elif:#多個條件加elif,想加幾個加幾個 **** else: **** python裏靠縮進來表示表示語句塊,見到