迅為IMX6ULL開發(fā)板Ubuntu下C編程入門(二)_第1頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、迅為imx6ull開發(fā)板ubuntu下c編程入門(二)在上圖可以看到變量 ceshi2 的值是 temp,也就是變量 ceshi1 最后一次的賦值。2. “ := ” 賦值符我們修改“=”賦值符中的代碼,其次行的“=”改成“:=”,代碼如下:1 ceshi1 = test2 ceshi2 := $(ceshi1)3 ceshi1 = temp45 out:6 echo ceshi2(ceshi2)我們在終端輸入“make out”指令,如下圖所示:file:/c:usersadmini1appdatalocaltempksohtml10068wps4.png我們可以看到上圖的運行結(jié)果輸出變量

2、ceshi2 的值是 test,雖然在第三行我們修改了變量 ceshi1 的值,通過本試驗我們可以看到“:=”賦值符的功能了。3. “ ?= ” 賦值符ceshi ?= test“?=”賦值符的作用是假如前面沒有給變量 ceshi 賦值,那么變量就賦值“test”,假如前面已經(jīng)賦值了,就用法前面的賦值。4. “ += ” 賦值符objs = main.oobjs += calc.o上面的腳本最后變量 objs 的值是“main.o calc.o”,“+=”賦值符的功能是實現(xiàn)變量的追加。3.4.3 條件推斷用法條件推斷,可以讓 make 按照運行時的不憐憫況挑選不同的執(zhí)行分支。條件表達式可以是比

3、較變量的值,或是比較變量和常量的值。其語法有下面兩種:1.條件為真時執(zhí)行的腳本endif2.條件為真時執(zhí)行的腳本else條件為假時執(zhí)行的腳本endif條件比較用到的比較關(guān)鍵字有:ifeq、ifneq、ifdef、ifndef。ifeq 表示假如比較相等,語法如下:ifeq(, )ifneq 表示假如不相等,語法如下:ifneq(, )ifdef 表示假如定義了變量,語法如下:ifdef ifndef 表示假如沒有定義變量,語法如下:ifndef 3.4.4 用法函數(shù)在 makefile 中可以用法函數(shù)來處理變量,從而讓我們的指令或是規(guī)章更為的靈便和具有智能。make 所支持的函數(shù)也不算無數(shù),不

4、過已經(jīng)足夠我們的操作了。函數(shù)調(diào)用后,函數(shù)的返回值可以當做變量來用法。函數(shù)的調(diào)用很像變量的用法,也是以“$”來標識的,語法如下:$( )或者:$ 函數(shù)名和參數(shù)集合之間以空格分隔,參數(shù)集合的參數(shù)通過逗號分隔。函數(shù)調(diào)用以“$”開始,以圓括號或花括號把函數(shù)名和參數(shù)括起。感覺很像一個變量。函數(shù)中的參數(shù)可以用法變量。為了風格的統(tǒng)一,函數(shù)和變量的括號最好一樣,如用法“$(subst a,b,$(x)”這樣的形式,而不是“$(subst a,b,$x)”的形式。由于統(tǒng)一會更清晰,也會削減一些不須要的棘手。接下來我們介紹幾個常用的函數(shù),其它的函數(shù)可以參考文檔跟我一起寫 makefile。t 1.subst 函數(shù)

5、$(subst ,)此函數(shù)的功能是把字串中的字符串替換成,函數(shù)返回被替換過后的字符串。如下示例:$(subst ee,ee,feet on the street)以上腳本實現(xiàn)把字符串“feet on the street”中的“ee”字符串替換成“ee”字符串,替換后的字符串為“feet on the street”。. 2. t patsubst 函數(shù)$(patsubst ,)此函數(shù)的功能是查找中的單詞(單詞以“空格”、“tab”或“回車”“換行”分隔)是否符合模式,假如匹配的話,則以替換。這里可以包括通配符“%”,表示隨意長度的字串。假如中也包含“%”,那么中的這個“%”將是中的那個“%”

6、所代表的字串。(可以用“”來轉(zhuǎn)義,以“%” 來表示真切含義的“%”字符)。函數(shù)返回被替換過后的字符串。如下示例:$(patsubst %.c,%.o,x.c bar.c)以上腳本實現(xiàn)把字串“x.c bar.c”符合模式%.c的單詞替換成%.o,返回結(jié)果是“x.o bar.o”3.strip 函數(shù)$(strip )此函數(shù)的功能是去掉字串中開始和結(jié)尾的空字符,函數(shù)返回被去掉空格的字符串值。如下示例:$(strip a b c )以上腳本實現(xiàn)把字串“a b c ”去掉開始和結(jié)尾的空格,結(jié)果是“a b c”。. 4. g findstring 函數(shù)$(findstring ,)此函數(shù)的功能是在字串中查

7、找字串,假如找到,那么返回,否則返回空字符串,如下示例:$(findstring a,a b c)$(findstring a,b c)以上腳本,第一個返回“a”字符串,其次個返回空字符串。r 5.dir 函數(shù)$(dir )此函數(shù)的功能是從文件名序列中取出名目部分。名目部分是指最后一個反斜杠(“/”)之前的部分。假如沒有反斜杠,那么返回“./”。返回文件名序列的名目部分,如下示例:$(dir src/foo.c hacks)以上腳本運行結(jié)果返回“src/”。. 6. r notdir 函數(shù)$(notdir )此函數(shù)的功能是從文件名序列中取出非名目部分。非名目部分是指最后一個反斜杠(“/”)之后

8、的部分,返回文件名序列的非名目部分,如下示例:$(notdir src/foo.c)以上腳本返回字符串“foo.c”. 7. h foreach 函數(shù)$(foreach ,)此函數(shù)的功能是把參數(shù)中的單詞逐一取出放到參數(shù)所指定的變量中,然后再執(zhí)行所包含的表達式。每一次會返回一個字符串,循環(huán)過程中,的所返回的每個字符串會以空格分隔,最后當囫圇循環(huán)結(jié)束時,所返回的每個字符串所組成的囫圇字符串(以空格分隔)將會是 foreach 函數(shù)的返回值。所以,最好是一個變量名,可以是一個表達式,而中普通會用法這個參數(shù)來依次枚舉中的單詞。如下示例:names := a b c dfiles := $(foreac

9、h n,$(names),$(n).o)以上腳本實現(xiàn)$(name)中的單詞會被挨個取出,并存到變量“n”中,“$(n).o”每次按照“$(n)”計算出一個值,這些值以空格分隔,最后作為 foreach 函數(shù)的返回,所以$(files)的值是“a.o b.o c.o d.o”。(注重,foreach 中的參數(shù)是一個暫時的局部變量,foreach 函數(shù)執(zhí)行完后,參數(shù)的變量將不在作用,其作用域只在 foreach 函數(shù)當中)。3.4.5 在規(guī)章中用法通配符假如我們想定義一系列比較類似的文件,我們很自然地就想起用法通配符。make 指令支持三種通配符:“*”,“?”和“.”,這是和 unix 的 b-

10、shell 是相同的?!啊弊址谖募幸灿斜容^特別的用途。假如是“/test”,這就表示當前用戶根名目下的 test 文件。而“admin/test”則表示用戶 admin 根名目下的 test 文件。通配符代替了一系列的文件,如“*.c”表示全部后綴為 .c 的文件。一個需要我們注重的是,假如我們的文件名中有通配符,如:“*”,那么可以用轉(zhuǎn)義字符“”,如“*” 來表示真切的“*”字符,而不是隨意長度的字符串。下面我們來看幾個詳細的示例:clean:rm -rf *.o上面這個示例解釋通配符可以在規(guī)章的指令中用法。print: *.c上面這個示例解釋通配符可以在規(guī)章的依靠中用法objects = *.o上面這個示例表示了,通符同樣可以用在變量中。并不是說*.o會綻開,objects 的值就是“*.o”。makefile中的變量其實就是 c/c+中的宏。假如你要讓通配符在變量中綻開,也就是讓 objects 的值是全部.o的文件名的集合,那么,你可以這樣:ob

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論