亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

[041]一個簡單的Makefile教程

2019-11-14 10:09:54
字體:
來源:轉載
供稿:網友

Makefile 是一個簡單的組織代碼編譯的方式。這個教程沒有深入的講解make,但能夠幫助初學者快速并且容易的創建自己的中型規模以下項目的makefiles。

一個簡單例子

首先讓我們創建三個文件,hellomake.c,hellofunc.c及hellomake.h,這三個文件是一個典型的main程序。 hellomake.c

#include <hellomake.h>int main() { // call a function in another file myPRintHelloMake(); return(0);}

hellofunc.c

#include <stdio.h>#include <hellomake.h>void myPrintHelloMake(void) { printf("Hello makefiles!/n"); return;}

hellomake.h

/*example include file*/void myPrintHelloMake(void);

通常我們通過下面的命令編譯這些代碼集合:

gcc -o hellomake hellomake.c hellofunc.c -I.

上面命令編譯兩個cpp文件,并生成可執行文件hellomake,“-I.”是gcc需要的include文件,上面命令指當前目錄,主要為hellomake.h。makefile可以免于我們每次在測試、修改、調試的時候都要重復的在命令行敲上面的命令,尤其我們需要添加更多.c文件時,makefile會為我們節省大量時間。下面就讓我們開始寫makefile吧!

最簡單的makefile就像下面的示例: Makefile 1

hellomake: hellomake.c hellofunc.c gcc -o hellomake hellomake.c hellofunc.c -I.

如果你把上面規則放在一個叫Makefile或makefile的文件中,然后在命令行敲make命令,就會按你在makefile中寫的進行編譯操作。

make后沒有參數,則執行makefile文件中的第一條規則。把命令依賴的文件列表放在第一行的“:”后,make就清楚,如果這些文件任意一個改變,規則hellomake就會被重新編譯執行。

現在我們已經能夠避免重復敲冗長的編譯命令。 有一個特別重要的說明,為了使代碼更加有效率,我們在makefile所有的gcc命令前寫一個聲明標簽,如下: Makefile 2

CC=gccCFLAGS=-I.hellomake: hellomake.o hellofunc.o $(CC) -o hellomake hellomake.o hellofunc.o $(CFLAGS)

上面我們定義的常量CC和CFLAGS將告訴make,我們如何編譯hellomake.c和hellofunc.c。宏常量CC是C編譯器使用的,CFLAGS是傳遞給編譯命令的一個便簽列表。通過放對象文件:hellomake.o 和 hellofunc.o在規則的依賴列表中,make就知道它首先要逐一的編譯.c文本,然后執行hellomake。

使用上面的makefile形式,對于小規模的工程是有效的。然而有一個重要的事情沒有說明:include的文件的依賴。如果我們改變了hellomake.h,make將不會重新編譯.c文件。為了補充這個缺點,我們需要告訴make,所有的.c文件依賴的.h文件,示例如下: Makefile 3

CC=gccCFLAGS=-I.DEPS = hellomake.h%.o: %.c $(DEPS) $(CC) -c -o $@ $< $(CFLAGS)hellomake: hellomake.o hellofunc.o $(CC) -o hellomake hellomake.o hellofunc.o $(CFLAGS)

這個首先添加了一個宏DEPS,它是.c文件依賴的.h文件的集合。然后我們定義了一個新規則,主要應用于所有已.o結尾的文件,這個規則告訴.o文件在宏DEPS中包含的所依賴的.c文本和.h文件。它也會告訴make,為了生成.o文件,make需要編譯.c文件?!?c”標簽表明生成對象文件,“-o @”標簽說明把編譯輸出到“:”左側的名字文件中,“<”是依賴列表中的第一個選項,宏“CFLAGS”含義就如上面定義的。

為了簡化我們的編寫,我們使用特殊的宏“@”和“^”,它們分別是“:”左側和右側內容,為了使所有的編譯規則更加一般化,下面的例子,把所有的依賴文件都列在宏DEPS內,把所有的對象文件都列下宏OBJ內: Makefile 4

CC=gccCFLAGS=-I.DEPS = hellomake.hOBJ = hellomake.o hellofunc.o %.o: %.c $(DEPS) $(CC) -c -o $@ $< $(CFLAGS)hellomake: $(OBJ) $(CC) -o $@ $^ $(CFLAGS)

而且如果我們想放我們的.h文件在include目錄下,我們的源碼文件在src目錄下,并且放一些本地依賴庫文件在lib目錄下,那我們怎么辦呢?而且我們如何隱藏這些煩人的出現在所有地方的.o文件呢? 下面的makefile定義了include和lib目錄的路徑,并且把對象文件放在了src目錄的obj子目錄下。它還定義了一個你想包含的庫的宏,例如math庫-lm。這個makefile應該被放在src目錄下。這個makefile還有一個規則,如果執行make clean,將會清空你的源文件和對象目錄?!?PYONY”規則使得make免于加參數clean的清理操作。

Makefile 5

IDIR =../includeCC=gccCFLAGS=-I$(IDIR)ODIR=objLDIR =../libLIBS=-lm_DEPS = hellomake.hDEPS = $(patsubst %,$(IDIR)/%,$(_DEPS))_OBJ = hellomake.o hellofunc.o OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))$(ODIR)/%.o: %.c $(DEPS) $(CC) -c -o $@ $< $(CFLAGS)hellomake: $(OBJ) gcc -o $@ $^ $(CFLAGS) $(LIBS).PHONY: cleanclean: rm -f $(ODIR)/*.o *~ core $(INCDIR)/*~

現在你已經有一個特別好的用來管理小型和中型規模項目的makefile,你可以增加更多規則到你的makefile,你甚至能創建調用其它規則的規則。對于更多makefiles和make函數,可以訪問GNU Make Manual,這里可以得到更多我們想知道的。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日本欧美一区| 亚洲变态欧美另类捆绑| 欧美亚洲第一页| 亚洲国产高清高潮精品美女| 91精品国产免费久久久久久| 日韩在线精品视频| 91嫩草在线视频| 欧洲s码亚洲m码精品一区| 欧美日韩高清在线观看| 亚洲美女av黄| 91色p视频在线| 亚洲国产精品一区二区久| 精品毛片网大全| 国产自摸综合网| 性色av一区二区三区| 在线免费观看羞羞视频一区二区| 91久久久久久久| 在线日韩第一页| 国产一区二区日韩精品欧美精品| 久久91亚洲精品中文字幕| 中文字幕在线看视频国产欧美| 国产精品久久久久久久久久| 亚洲少妇激情视频| 亚洲资源在线看| 中文精品99久久国产香蕉| 欧美大片欧美激情性色a∨久久| 日韩精品在线视频美女| 久久免费精品日本久久中文字幕| 国产精品av在线| 日韩av最新在线观看| 午夜精品美女自拍福到在线| 亚洲国产成人久久综合一区| 国产成人亚洲综合91精品| 亚洲成人网在线观看| 亚洲福利视频二区| 国产玖玖精品视频| 亚洲mm色国产网站| 91高清免费视频| 性欧美办公室18xxxxhd| 亚洲激情在线观看视频免费| 国产成人自拍视频在线观看| 亚洲伊人久久综合| 91国产精品视频在线| 国产婷婷成人久久av免费高清| 国产精品一区二区在线| 俺也去精品视频在线观看| 亚洲天堂网在线观看| 国产精品久久久久久av下载红粉| 成人国产精品色哟哟| 成人黄色生活片| 精品性高朝久久久久久久| 黄色精品在线看| 亚洲精品成人久久电影| 国产日韩精品一区二区| 日韩av在线播放资源| 国产97免费视| 国产精品美女免费视频| 欧美亚洲激情在线| www.欧美视频| 97人人模人人爽人人喊中文字| 久久精品国产欧美亚洲人人爽| 国产999精品久久久| 国产精品一二三视频| 国内精品久久久久久影视8| 上原亚衣av一区二区三区| 久久久www成人免费精品| 欧美激情第三页| 欧美激情精品久久久久久蜜臀| 国产国语刺激对白av不卡| 欧美最顶级丰满的aⅴ艳星| 欧美成人一区二区三区电影| 亚洲男人的天堂在线| 狠狠躁夜夜躁久久躁别揉| 7m精品福利视频导航| 97国产成人精品视频| 另类图片亚洲另类| 国产suv精品一区二区三区88区| 亚洲国产另类久久精品| 中国china体内裑精亚洲片| 亚洲aa在线观看| 国产一区二区精品丝袜| 日本精品一区二区三区在线播放视频| 日韩av网站大全| 日韩大胆人体377p| 国产性猛交xxxx免费看久久| 欧美午夜精品伦理| 亚洲国产精品女人久久久| 精品亚洲一区二区三区在线播放| 亚洲欧美另类国产| 永久555www成人免费| 一本色道久久88综合亚洲精品ⅰ| xxav国产精品美女主播| 中日韩美女免费视频网站在线观看| 不卡av电影在线观看| 日韩中文字幕视频在线观看| 国产一区视频在线播放| 国产午夜精品视频| 日产精品99久久久久久| 国产精品久久久久免费a∨大胸| 国产一区二中文字幕在线看| 成人春色激情网| 国产精品aaaa| 欧美自拍视频在线观看| 欧美猛少妇色xxxxx| 疯狂做受xxxx欧美肥白少妇| 欧美激情第99页| 国产精品91久久久| 精品久久久一区二区| 蜜臀久久99精品久久久久久宅男| www.久久久久久.com| 久久久91精品国产一区不卡| 亚洲风情亚aⅴ在线发布| 日韩精品在线视频观看| 欧美在线视频免费观看| 亚洲国产天堂网精品网站| 91在线视频九色| 91中文精品字幕在线视频| www.久久久久久.com| 色偷偷av一区二区三区| 国产精品第七十二页| 欧美与黑人午夜性猛交久久久| 中国日韩欧美久久久久久久久| 97香蕉久久超级碰碰高清版| 国产精品中文字幕在线| 日韩美女视频免费在线观看| 国产日产久久高清欧美一区| 亚洲欧洲成视频免费观看| 97福利一区二区| 九九热精品在线| 欧美午夜视频一区二区| 欧美激情欧美激情在线五月| 97在线视频国产| 欧美福利视频在线| 国产suv精品一区二区三区88区| 狠狠干狠狠久久| 精品无码久久久久久国产| 欧美日韩中文在线| 欧美国产视频日韩| 国产xxx69麻豆国语对白| 国产欧洲精品视频| 久久久精品久久久久| 最新日韩中文字幕| 国产精品欧美亚洲777777| 777777777亚洲妇女| 亚洲精品国精品久久99热一| 自拍偷拍亚洲欧美| 久久久av网站| 国模吧一区二区| 97涩涩爰在线观看亚洲| 中文字幕久久精品| 一区二区三区四区精品| 欧美高清videos高潮hd| www日韩欧美| 国产亚洲xxx| 国产suv精品一区二区三区88区| www.精品av.com| 一区二区三区无码高清视频| 国产精品一区二区三区成人| 亚洲精品国产综合久久| 狠狠躁夜夜躁人人躁婷婷91| 国产精品久久久久久久久久新婚| 亚洲欧洲高清在线| 亚洲性夜色噜噜噜7777| 91在线观看免费高清完整版在线观看|