麻豆黑色丝袜jk制服福利网站-麻豆精品传媒视频观看-麻豆精品传媒一二三区在线视频-麻豆精选传媒4区2021-在线视频99-在线视频a

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

手機站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時隨地免費學(xué)

千鋒教育

掃一掃進入千鋒手機站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時隨地免費學(xué)習(xí)課程

當(dāng)前位置:首頁  >  技術(shù)干貨  > makefiledefine詳解

makefiledefine詳解

來源:千鋒教育
發(fā)布人:xqq
時間: 2023-11-24 21:24:57 1700832297

makefiledefine是一種makefile的函數(shù),通過它可以定義一個函數(shù),使得后續(xù)的makefile中可以重復(fù)使用該函數(shù)。它能夠減少代碼冗余,提高代碼復(fù)用率,減小代碼的維護量,對于復(fù)雜的makefile而言,具有非常重要的作用。

一、makefiledefine的語法

makefiledefine的語法非常簡單,它的基本格式如下:


define 函數(shù)名
    函數(shù)體
endef

其中,函數(shù)名是函數(shù)的名稱,函數(shù)體是函數(shù)的實現(xiàn),endef用于表示函數(shù)體的結(jié)束。需要注意的是,define和endef都必須從行首開始書寫,否則makefile會將它們視為普通的命令而不是函數(shù)定義語句。

二、makefiledefine的用法

makefiledefine的用法非常廣泛,它可以用于定義各種類型的函數(shù),包括命令、變量、文件等。

1. 定義命令類型的函數(shù)

命令類型的函數(shù)一般用于封裝一系列的命令,實現(xiàn)某一特定的功能。比如,我們需要對多個文件進行打包,可以使用以下define命令定義一個名為package的函數(shù):


define package
    tar -zcvf $(1).tar.gz $(1)
endef

該函數(shù)將參數(shù)1作為文件名,使用tar命令將該文件夾打包成一個壓縮包。

使用該函數(shù)只需要在makefile中調(diào)用即可:


$(call package, myfolder)

在make執(zhí)行時,該函數(shù)會被展開成為相應(yīng)的命令,執(zhí)行打包操作。

2. 定義變量類型的函數(shù)

變量類型的函數(shù)一般用于封裝某一特定的計算過程,返回一個值作為變量,以方便多處使用。比如,我們需要計算某個文件夾下的所有文件個數(shù),并將其保存在一個變量中:


define file_count
    $$(shell find $(1) -type f | wc -l)
endef

OBJECTS_DIR = ./obj
SRCS = $$(wildcard *.c)
OBJS = $$(patsubst %.c,$(OBJECTS_DIR)/%.o,$$(SRCS))

count:
        $$(call file_count, $(SRCS))

該函數(shù)使用find命令查找某個文件夾下的所有文件,使用wc命令統(tǒng)計其個數(shù),返回該個數(shù)作為函數(shù)的值。在make執(zhí)行時,該函數(shù)會被展開成為相應(yīng)的變量,使用調(diào)用該函數(shù)即可獲取計算結(jié)果。

3. 定義文件類型的函數(shù)

文件類型的函數(shù)一般用于封裝某一特定的文件操作,返回一個文件作為函數(shù)值,以方便后續(xù)的操作。比如,我們需要將若干個文件合并成一個文件,并返回合并后的文件名:


define merge_files
    $(shell cat $(1) > merged_file.txt && echo merged_file.txt)
endef

FILES = file1.txt file2.txt file3.txt
MERGED_FILE = $(call merge_files, $(FILES))

merge:
        @echo $(MERGED_FILE)

該函數(shù)使用cat命令將所有文件內(nèi)容合并到merged_file.txt中,然后返回該文件名。調(diào)用該函數(shù)即可獲取合并后的文件名。

三、makefiledefine使用的注意點

使用makefiledefine時需要注意以下幾點:

1. 對define和endef需要進行轉(zhuǎn)義處理

由于define和endef是makefile的關(guān)鍵字,所以在makefile中使用時需要進行轉(zhuǎn)義處理。在makefile中,$和(都具有特殊含義,為了避免這些特殊含義對define和endef的解析造成困擾,需要在它們前面添加一個特殊符號,例如$$(和($$。

2. define和endef必須從行首開始書寫

define和endef必須從行首開始書寫,否則makefile會將它們視為普通的命令而不是函數(shù)定義語句。同時,函數(shù)體中的空格和制表符也非常重要,因為它們決定了函數(shù)體的縮進。

3. 函數(shù)名只能使用字母和數(shù)字

函數(shù)名只能由字母和數(shù)字組成,不能包含其他特殊符號。

4. 必須使用call關(guān)鍵字調(diào)用函數(shù)

定義函數(shù)之后,必須使用call關(guān)鍵字調(diào)用函數(shù),才能讓makefile將函數(shù)展開成相應(yīng)的命令或變量。如果沒有使用call關(guān)鍵字,makefile會將該函數(shù)視為普通的文本字符串而不是函數(shù)。

5. 用函數(shù)調(diào)用函數(shù),要注意縮進問題

如果使用函數(shù)調(diào)用函數(shù),需要注意縮進問題。如果調(diào)用的函數(shù)體中包含縮進,那么該縮進將會被傳遞到父函數(shù)中,可能會對makefile的執(zhí)行造成影響。為了避免這個問題,可以使用$(strip)函數(shù)去除掉縮進。

四、總結(jié)

makefiledefine可以將常用的代碼封裝為函數(shù),提高代碼的復(fù)用性和可讀性,尤其是對于需要重復(fù)執(zhí)行的操作,用函數(shù)可以避免重復(fù)編寫命令,節(jié)省工作量。在使用時需要注意轉(zhuǎn)義字符、縮進、函數(shù)調(diào)用等問題,只有規(guī)范的使用才能發(fā)揮makefiledefine的最大價值。

tags: mavengson
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
免費領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
主站蜘蛛池模板: 波多野结衣大战三个黑鬼| 久草网在线| 欧美人与物videos另类xxxxx| 久久国产精品免费一区二区三区| 调教在线观看| 女人被男人躁到呻吟的| 国产综合色在线视频区| 野花社区视频在线观看| 特黄特色大片免费播放 | 嘟嘟嘟www免费高清在线中文| 动漫美女吸乳羞羞动漫 | 被公侵犯肉体的中文字幕| 国产日产久久高清欧美一区| 欧美性bbbbbxxxxxxx| 国产精品99久久久久久www| 免费国产不卡午夜福在线| 成人永久免费高清| 无翼乌全彩无漫画大全| 久久精品国产亚洲精品2020| 一二三四在线视频社区8| 日本三级午夜理伦三级三| 88av影视| 久久综合九色综合欧美播| 亚洲欧美日韩综合久久久久| 欧美性大战久久久久久| 韩日黄色片| 欧美猛交| 快一点使劲c我在线观看| 啊轻点灬大ji巴太粗太长了视| 天天操夜夜操| 2021日产国产麻豆| 波多野结衣动态图| 女人是男人的未来1分29分| 口工全彩无遮挡3d漫画在线| 东北女大战28公分黑人| 欧美性乱| 久久99热66这里只有精品一| 最新在线中文字幕| 日本视频免费高清一本18| 亚洲理论精品午夜电影| 俺也去在线观看视频|