日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Makefile 基本知识

發布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Makefile 基本知识 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Technorati 標簽: Makefile 基本知識

?

最常見的書寫方式: CC = gcc LD = ld STRIP = strip CFLAGS := -Os -static -DEZ_OS_LINUX CLFLAGS := -Os -static all: mainEXEC = main OBJS = main.o mytool1.o mytool2.o INCS = mytool1.h mytool2.hall: $(EXEC) $(EXEC): $(OBJS)$(CC) $(CFLAGS) -o $@ $(OBJS)$(STRIP) $@ clean:-rm -f $(EXEC) *.elf *.gdb *.o %.o: %.c $(INCS)$(CC) $(CFLAGS) -c $< -o $@

?

Makefile中允許使用簡單的宏來指代源文件以及相關編譯選項,引用宏時,必須在變量名稱前加美元$,同時,使用圓括號括起來(變量名為兩個字母以上時)

下面都是有效的宏引用:

??? $(CFLAGS)

??? $2

??? $Z

??? $(Z)?
其中最后兩個引用是完全一致的。

??? $@????? --? 目標文件,??

??? $^????? --? 所有的依賴文件,

??? $<????? --? 第一個依賴文件。

# 這是簡化后的Makefile

main:main.o mytool1.o mytool2.o

gcc -o $@ $^??????????? //$@ 就是main, $^就是main.o mytool1.o mytool2.o

main.o:main.c mytool1.h mytool2.h

gcc -c $<?????????????? //$<就是main.c

mytool1.o:mytool1.c mytool1.h

gcc -c $<?????????????? //$<就是mytool1.c

mytool2.o:mytool2.c mytool2.h

gcc -c $<?????????????? //$<就是mytool2.c

?

常用字符串處理函數

1.$(subst FROM,TO,TEXT)
函數名稱:字符串替換函數—subst。
函數功能:把字串“TEXT”中的“FROM”字符替換為“TO”。
返回值:替換后的新字符串。
2.$(patsubst PATTERN,REPLACEMENT,TEXT)
函數名稱:模式替換函數—patsubst。
函數功能:搜索“TEXT”中以空格分開的單詞,將否符合模式“TATTERN”替換為“REPLACEMENT”。參數“PATTERN”中可以使用模式通配符“%”來代表一個單詞中的若干字符。
返回值:替換后的新字符串。
函數說明:參數“TEXT”單詞之間的多個空格在處理時被合并為一個空格,但前導和結尾空格忽略。

3.$(strip STRINT)
函數名稱:去空格函數—strip。
函數功能:去掉字串(若干單詞,使用若干空字符分割)“STRINT”開頭和結尾的空字符,并將其中多個連續空字符合并為一個空字符。
返回值:無前導和結尾空字符、使用單一空格分割的多單詞字符串。
函數說明:空字符包括空格、[Tab]等不可顯示字符。

4.$(sort LIST)
函數名稱:排序函數—sort。
函數功能:給字串“LIST”中的單詞以首字母為準進行排序(升序),并取掉重復的單詞
返回值:空格分割的沒有重復單詞的字串。
函數說明:兩個功能,排序和去字串中的重復單詞。可以單獨使用其中一個功能。

?

二、文件名處理函數

1.$(dir NAMES…)
函數名稱:取目錄函數—dir。
函數功能:從文件名序列“NAMES…”中取出各個文件名目錄部分。文件名的目錄部分就是包含在文件名中的最后一個斜線(“/”)(包括斜線)之前的部分。
返回值:空格分割的文件名序列“NAMES…”中每一個文件的目錄部分。
函數說明:如果文件名中沒有斜線,認為此文件為當前目錄(“./”)下的文件。

2.$(notdir NAMES…)
函數名稱:取文件名函數——notdir。
函數功能:從文件名序列“NAMES…”中取出非目錄部分。目錄部分是指最后一個斜線(“/”)(包括斜線)之前的部分。刪除所有文件名中的目錄部分,只保留非目錄部分
返回值:文件名序列“NAMES…”中每一個文件的非目錄部分。

3.$(addprefix PREFIX,NAMES…)
函數名稱:加前綴函數—addprefix。
函數功能:為“NAMES…”中的每一個文件名添加前綴“PREFIX”。參數“NAMES…”是空格分割的文件名序列,將“SUFFIX”添加到此序列的每一個文件名之前。
返回值:以單空格分割的添加了前綴“PREFIX”的文件名序列。

4.$(wildcard PATTERN)
函數名稱:獲取匹配模式文件名函數—wildcard
函數功能:列出當前目錄下所有符合模式“PATTERN”格式的文件名。
返回值:空格分割的、存在當前目錄下的所有符合模式“PATTERN”的文件名。
函數說明:“PATTERN”使用shell可識別的通配符,包括“?”(單字符)、“*”(多字符)等。

?

三、其它函數

1.$(foreach VAR,LIST,TEXT)
函數功能:函數“foreach”不同于其它函數。它是一個循環函數。類似于Linux的shell中的循環(for語句)。這個函數的工作過程是這樣的:如果必要(存在變量或者函數的引用),首先展開變量“VAR”和“LIST”;而表達式“TEXT”中的變量引用不被展開。執行時把“LIST”中使用空格分割的單詞依次取出賦值給變量“VAR”,然后執行“TEXT”表達式。重復直到“LIST”的最后一個單詞(為空時結束)。“TEXT”中的變量或者函數引用在執行時才被展開,因此如果在“TEXT”中存在對“VAR”的引用,那么“VAR”的值在每一次展開式將會到的不同的值。
返回值:空格分割的多次表達式“TEXT”的計算的結果。

2.$(if CONDITION,THEN-PART[,ELSE-PART])
函數功能:函數“if”提供了一個在函數上下文中實現條件判斷的功能。就像make所支持的條件語句—ifeq。第一個參數“CONDITION”,在函數執行時忽略其前導和結尾空字符并展開。“CONDITION”的展開結果非空,則條件為真,就將第二個參數“THEN_PATR”作為函數的計算表達式,函數的返回值就是第二表達式的計算結果;“CONDITION”的展開結果為空,將第三個參數“ELSE-PART”作為函數的表達式,返回結果為第三個表達式的計算結果。
返回值:根據條件決定函數的返回值是第一個或者第二個參數表達式的計算結果。當不存在第三個參數“ELSE-PART”,并且“CONDITION”展開為空,函數返回空。
函數說明:函數的條件表達式“CONDITION”決定了,函數的返回值只能是“THEN-PART”或者“ELSE-PART”兩個之一的計算結果。

3.$(shell command arguments)
函數功能:函數“shell”所實現的功能和shell中的引用(``)相同。實現了命令的擴展。意味著需要一個shell命令作為它的參數,而返回的結果是此命令在shell中的執行結果。make僅僅對它的回返結果進行處理;make將函數的返回結果中的所有換行符(“\n”)或者一對“\n\r”替換為單空格;并去掉末尾的回車符號(“\n”)或者“\n\r”。函數展開式時,它所調用的命令(它的參數)得到執行。除了對它的引用出現在規則的命令行中和遞歸的變量定義引用以外,其它決大多數情況下,make在讀取Makefile時函數shell就被擴展。
返回值:函數“shell”的參數在shell中的執行結果。
函數說明:函數本身的返回值是其參數的執行結果,沒有進行任何處理。對結果的處理是由make進行的。當對函數的引用出現在規則的命令行中,命令行在執行時函數引用才被展開。展開過程函數參數的執行時在另外一個shell進程中完成的,因此對于出現在規則命令行的多級“shell”函數引用需要謹慎處理,否則會影響效率(每一級的“shell”函數的參數都會有各自的shell進程)。

轉載于:https://www.cnblogs.com/cherishui/p/4313965.html

總結

以上是生活随笔為你收集整理的Makefile 基本知识的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜看片 | 欧美大胆视频 | 亚洲欧美一区在线 | 日韩av中文字幕在线播放 | 国内久久精品 | 青青草原在线免费 | 色偷偷噜噜噜亚洲男人的天堂 | 在线免费视频一区二区 | 色综合久久88色综合天天6 | 麻豆精品久久久久久久99蜜桃 | 少妇献身老头系列 | 91精品小视频 | 国产精品日日做人人爱 | av久久久| 韩国三级视频在线观看 | 久久久久久久久久99 | 国产91久久婷婷一区二区 | 婷婷去俺也去 | 欧美福利视频在线 | 午夜久久久久久久久 | 日本久操 | 一级免费在线观看 | 日韩手机看片 | 色诱视频在线观看 | 国产精品mv | 亚洲涩综合 | 国产成人福利视频 | 国产乱码精品一区二三赶尸艳谈 | 国产中文一区二区三区 | 深喉口爆一区二区三区 | 99久热 | 黄色aaa大片 | 欧美小视频在线 | 久久春色| 精品欧美一区二区三区久久久 | 中文一区二区在线 | 色拍拍视频 | 日美毛片| av天堂一区二区三区 | 国产成人99久久亚洲综合精品 | a黄色一级片| 日韩黄色片免费看 | 性猛交xxxx乱大交3 | 久久久久亚洲精品中文字幕 | 国产精品一卡二卡在线观看 | 一区二区三区中文字幕在线观看 | 艳母在线视频 | 一本色道久久88 | 日本欧美韩国国产精品 | 日韩精品高清在线观看 | 四虎影城库 | 欧美一区二区三区激情视频 | 二区视频在线 | 午夜影院日本 | 午夜电影网一区 | 中国在线观看免费高清视频播放 | 91看片在线| 成人黄色在线看 | 亚洲午夜福利一区二区三区 | 国产日产亚洲精品 | 天天综合网在线观看 | www.啪啪 | 天天看视频 | 北条麻妃av在线播放 | 久草一本 | www.99re7.com| 少妇高潮一区二区三区喷水 | 多啪啪免费视频 | 国产 丝袜 欧美中文 另类 | 婷婷精品 | 肉肉av福利一精品导航 | 国模婷婷 | 成人吃奶视频 | 9191国产精品| 99久久99久久精品国产片果冻 | 日韩夜夜 | 性猛交富婆╳xxx乱大交天津 | 色吊妞| 日本精品视频一区二区 | 91精品导航 | 亚洲三级影视 | 绯色av蜜臀vs少妇 | 91麻豆视频网站 | 麻豆一区二区三区精品视频 | 成人久久一区二区 | 成人小视频在线免费观看 | 亚洲少妇视频 | 久久国产精品首页 | 亚洲欧洲一区二区三区 | 99热这里只有精品4 精品国产黄色 | a级片在线 | www.久久伊人 | 网站在线看| 高清日韩av | 深夜福利院| 免费麻豆av| 日韩成人一区 | 色综合久久88色综合天天免费 | www.色国产|