日韩性视频-久久久蜜桃-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 基本知识的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 色香视频首页 | 爱就操| 国产高潮在线 | 五月婷婷久久久 | 91毛片网| 一区二区三区在线视频观看 | 亚洲激情图 | 男人添女人下部高潮视频 | 精品亚洲一区二区 | 欧美性猛交xxx乱久交 | 欧美日韩在线视频免费 | 99资源在线 | 欧美第一网站 | 青青草青青操 | 无码人妻一区二区三区精品视频 | 国产片一区二区三区 | 噜噜噜久久久 | 成人免费视频久久 | 91网入口 | 少妇激情四射 | 香蕉尹人 | 日韩视频在线观看免费 | 黄av资源 | 91亚洲精品视频 | 国内福利视频 | aaa特级毛片 | 红桃视频成人 | 久草蜜桃 | 亚洲久久在线观看 | 狠狠伊人 | 少妇在军营h文高辣 | 色婷婷精品国产一区二区三区 | 新x8x8拨牐拨牐永久免费影库 | 综合久久久久久久 | 日本三级黄在线观看 | 一本色道久久加勒比精品 | 欧美久草 | 手机av资源 | 欧美啪啪一区二区 | www.haoav| 成人福利影院 | 国产一级做a爱免费视频 | 亚洲精品在线免费播放 | 国产真实乱人偷精品视频 | 和黑帮大佬的365 | 久久久91精品国产一区二区三区 | www.午夜视频| 日韩免费在线视频观看 | 内射无码专区久久亚洲 | 狠狠综合一区 | 国产污视频在线观看 | av激情在线观看 | 国产91精品久久久 | 国产成人一区二区三区免费看 | 日本黄色片免费看 | 亚洲一区二区影视 | 亚洲精品乱 | 影音先锋中文字幕在线视频 | 欧美日韩国产图片 | 成人性生交大片免费看vrv66 | 欧美视频一区二区在线 | 成人一级免费视频 | 久草视频在线免费看 | 夜夜爽av福利精品导航 | 狠狠操免费视频 | a级片视频网站 | 亚洲第一av网站 | 2025中文字幕 | 色老头一区二区三区 | 91精品福利在线 | 丁香婷婷九月 | 国产精品主播一区二区 | www.一区二区三区四区 | 欧美久久久久久久久久久久 | 粗大的内捧猛烈进出视频 | 老司机久久精品视频 | 日本精品一区视频 | 波多野结衣爱爱 | 女同性恋毛片 | 91禁动漫在线 | 人人爽人人爽人人片 | 成人免费视频一区二区 | 欧美骚少妇 | 91九色国产ts另类人妖 | 精品人妻一区二区三区潮喷在线 | 狠狠人妻久久久久久综合麻豆 | 精品久久久久久久久久久久久久久 | www.欧美日韩 | 国产精品一品二区三区的使用体验 | 国产精品扒开做爽爽爽的视频 | 成人免费无码大片a毛片抽搐色欲 | 一级做a爰片 | 老汉色av| 欧美又大又硬又粗bbbbb | 三级黄色网络 | 丁香一区二区 | 中文字幕 视频一区 | 日韩诱惑 | 国产精品久久久久无码av色戒 |