久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

    1. <style id="76ofp"></style>

      <style id="76ofp"></style>
      <rt id="76ofp"></rt>
      <form id="76ofp"><optgroup id="76ofp"></optgroup></form>
      1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

        手機(jī)站
        千鋒教育

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

        千鋒教育

        掃一掃進(jìn)入千鋒手機(jī)站

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

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

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

        makefiledefine詳解

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

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

        一、makefiledefine的語法

        makefiledefine的語法非常簡(jiǎn)單,它的基本格式如下:

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

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

        二、makefiledefine的用法

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

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

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

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

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

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

        
        $(call package, myfolder)
        

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

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

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

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

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

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

        
        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使用的注意點(diǎn)

        使用makefiledefine時(shí)需要注意以下幾點(diǎn):

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

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

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

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

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

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

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

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

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

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

        四、總結(jié)

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

        tags: mavengson
        聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
        10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
        請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
        免費(fèi)領(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
        贵州省| 宽城| 山东| 广南县| 建阳市| 杂多县| 周口市| 左权县| 西峡县| 南木林县| 连城县| 贵定县| 肃宁县| 葫芦岛市| 克东县| 章丘市| 淮南市| 乌鲁木齐县| 方山县| 通河县| 丰台区| 崇信县| 东安县| 长海县| 元谋县| 郯城县| 巴彦县| 天峨县| 乌兰察布市| 成安县| 莲花县| 丹凤县| 东山县| 余干县| 吴堡县| 湟中县| 盘山县| 繁峙县| 堆龙德庆县| 双江| 邵阳市|