變量與函數(shù)的綜合示例(九)-創(chuàng)新互聯(lián)

        之前我們學習了 makefile 中的變量及函數(shù)的相關語法知識,那么我們今天就來以實際需求為例來進行實際編寫。實戰(zhàn)需求:1、自動生成 target 文件夾存放可執(zhí)行文件;2、自動生成 objs 文件夾存放編譯生成的目標文件(*.o);3、支持調試版本的編譯選項;4、考慮代碼的擴展性。

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網綜合服務,包含不限于成都網站設計、成都網站建設、昔陽網絡推廣、小程序定制開發(fā)、昔陽網絡營銷、昔陽企業(yè)策劃、昔陽品牌公關、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們大的嘉獎;創(chuàng)新互聯(lián)為所有大學生創(chuàng)業(yè)者提供昔陽建站搭建服務,24小時服務熱線:028-86922220,官方網址:muchs.cn

        那么在進行今天的 makefile 編寫之前,我們還需要了解下幾個知識點:a> $(wildcard _pattern),它的作用是獲取當前工作目錄中滿足 _pattern 的文件或目錄列表;b> $(addprefix _prefix,_names),它的作用是給名字列表 _names 中的每一個名字增加前綴 _prefix。

        其中的關鍵技巧:1、自動獲取當前目錄下的源文件列表(函數(shù)調用):SRCS := $(wildcard *.c);2、根據(jù)源文件列表生成目標文件列表(變量的值替換):OBJS := $(SRCS:.c=.o);3、對每一個目標列表加上路徑前綴(函數(shù)調用):OBJS := $(addprefix path/, $(OBJS))。

        我們來看看規(guī)則中的模式替換(目錄結構),如下

變量與函數(shù)的綜合示例(九)

        看看編譯規(guī)則的依賴,如下

變量與函數(shù)的綜合示例(九)

        下來我們來看看具體的 makefile 是怎樣編寫的,還是以之前的那三個 .c 文件為源文件。

CC := gcc MKDIR := mkdir RM := rm -rf DIR_OBJS := objs DIR_TARGET := target DIRS := $(DIR_OBJS) $(DIR_TARGET) TARGET := $(DIR_TARGET)/hello-makefile.out # main.c func.c const.c SRCS := $(wildcard *.c) # main.o func.o const.o OBJS := $(SRCS:.c=.o) # objs/main.o objs/func.o objs/const.o OBJS := $(addprefix $(DIR_OBJS)/, $(OBJS)) .PHONY : rebuild clean all $(TARGET) : $(DIRS) $(OBJS)     $(CC) -o $@ $(OBJS)     @echo "Target File ==> $@" $(DIRS) :     $(MKDIR) $@ $(DIR_OBJS)/%.o : %.c     ifeq ($(DEBUG),true)         $(CC) -o $@ -g -c $^     else         $(CC) -o $@ -c $^     endif rebuild : clean all all : $(TARGET) clean :     $(RM) $(DIRS)

        我們來看看編譯效果

變量與函數(shù)的綜合示例(九)

        我們看到已經正確執(zhí)行了,在當前目錄下自動生成兩個文件夾 objs target。在 objs 文件夾里生成三個 .o 文件,在 target 文件夾中生成 hello-makefile.out 文件,執(zhí)行這個可執(zhí)行文件,結果也是我們之前定義的。下來我們來看看能不能定義 DEBUG 版的程序,這時便要用到一個命令了 objdump -S target,它用于來查看程序是否為調試版。下來我們來看看結果,圖 a 為普通版的,圖 b 為 DEBUG 版的

變量與函數(shù)的綜合示例(九)

                                                                      圖 a 普通版

變量與函數(shù)的綜合示例(九)

                                                                    圖 b DEBUG 版

        我們看到 DEBUG 版本相對于普通版來說,多了一些東西,比如我們在里面寫的 printf 語句,而且多了函數(shù)調用的語句。普通版則是只執(zhí)行程序就 OK 了。通過今天的綜合示例的編寫,總結如下:1、目錄是可以成為目標的依賴的,在規(guī)則中創(chuàng)建目錄;2、預定義函數(shù)是 makefile實戰(zhàn)時不可或缺的部分;3、規(guī)則中的模式匹配可以直接針對目錄中的文件;4、可以使用命令行變量編譯特殊的目標版本。

        歡迎大家一起來學習 makefile 語言,可以加我QQ:243343083。

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

網頁名稱:變量與函數(shù)的綜合示例(九)-創(chuàng)新互聯(lián)
URL標題:http://muchs.cn/article18/dejedp.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供動態(tài)網站、做網站商城網站、搜索引擎優(yōu)化、網站建設、App開發(fā)

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網站建設