免费A级毛片无码专区网站-成人国产精品视频一区二区-啊 日出水了 用力乖乖在线-国产黑色丝袜在线观看下-天天操美女夜夜操美女-日韩网站在线观看中文字幕-AV高清hd片XXX国产-亚洲av中文字字幕乱码综合-搬开女人下面使劲插视频

Makfile總結(jié)

Makfile總結(jié)在前面的三篇文章徹底掌握Makefile(一)、徹底掌握Makefile(二)和徹底掌握Makeifle(三)當(dāng)中我們仔細(xì)介紹了Makefile各種使用方法,在本篇文章當(dāng)中主要是對(duì)前面三篇關(guān)于makefile的文章做一個(gè)總結(jié),方便大家快速查閱和檢查 。
Makefile基礎(chǔ)以及小技巧Make命令的工作流程當(dāng)我們?cè)诿钚挟?dāng)中輸入make的時(shí)候他的執(zhí)行流程如下:

  • make命令首先會(huì)在當(dāng)前目錄下面尋找makefile或者M(jìn)akefile文件 。
  • 尋找到makefile文件之后,他會(huì)在文件當(dāng)中尋找到一個(gè)編譯目標(biāo),比如在上面的makefile文件當(dāng)中他會(huì)找到demo這個(gè)編譯目標(biāo),而不是clean這個(gè)目標(biāo),因?yàn)?code>clean是第二個(gè)編譯目標(biāo) 。
  • 然后make會(huì)解析編譯目標(biāo)的依賴,如果這個(gè)依賴是其他的編譯目標(biāo)A的話,那么make會(huì)先完成它依賴的編譯目標(biāo)A的命令,如果它依賴的編譯目標(biāo)A也存在依賴B的話,make就會(huì)去執(zhí)行依賴的B的編譯命令,如此的遞歸下去,知道有所得依賴目標(biāo)都存在了,才會(huì)完成第一個(gè)編譯目標(biāo)的編譯,這個(gè)也很好理解,只有依賴文件都存在了我們才能夠完成正確的編譯過程 。
Makefile當(dāng)中的小技巧
  • makefile基本規(guī)則
編譯目標(biāo):依賴文件 編譯命令
  • 一個(gè)最基本的makefile
main: demo.o myprint.o gcc demo.o myprint.o -o out echo make 解析編譯完成demo.o: demo.c gcc -c demo.c -o demo.omyprint.o: myprint.c gcc -c myprint.c -o myprint.oclean: rm myprint.o demo.o out
  • 在makefile當(dāng)中使用變量
cflags=-cmain: demo.o myprint.o gcc demo.o myprint.o -o outdemo.o: demo.c gcc $(cflags) demo.c -o demo.omyprint.o: myprint.c gcc $(cflags) myprint.c -o myprint.oclean: rm myprint.o demo.o out
  • 在makefile當(dāng)中使用include
include submakefiledemo.o: demo.c gcc $(cflags) demo.c -o demo.omyprint.o: myprint.c gcc $(cflags) myprint.c -o myprint.oclean: rm myprint.o demo.o out
  • 在makefile當(dāng)中使用PHONY
cflags=-cmain: demo.o myprint.o gcc demo.o myprint.o -o maindemo.o: demo.c gcc $(cflags) demo.c -o demo.omyprint.o: myprint.c gcc $(cflags) myprint.c -o myprint.oclean: rm myprint.o demo.o main.PHONY: clean # 增加這一行
  • 在makefile當(dāng)中使用通配符
cflags=-cmain: demo.o myprint.o gcc demo.o myprint.o -o main%.o: %.c gcc $(cflags) $<clean: rm myprint.o demo.o main.PHONY: clean
  • 在makefile當(dāng)中使用VPATH自動(dòng)搜索
cflags=-cVPATH=./filesmain: demo.o myprint.o a.o b.o gcc demo.o myprint.o a.o b.o -o maindemo.o:demo.c gcc $(cflags) demo.c myprint.o:myprint.c gcc $(cflags) myprint.c a.o: a.c gcc $(cflags) $<b.o: b.c gcc $(cflags) $<clean: rm myprint.o demo.o main.PHONY: clean
  • @符號(hào)
有時(shí)候在makefile當(dāng)中我們不想輸出某些命令(如果不進(jìn)行設(shè)置makefile會(huì)輸出每一條我們執(zhí)行過的命令),我們就可以使用@符號(hào)進(jìn)行修飾 。
main: demo.c @echo hello world
  • override覆蓋命令行的賦值,讓makefile文件當(dāng)中的變量覆蓋命令行當(dāng)中的變量 。
Makefile當(dāng)中進(jìn)行if判斷ifeq 和 ifneq主要是用于判斷字符是否相等 。
cc=g++main: demo.c echo $(cc)ifeq ($(cc), gcc) echo $(cc) = 相等的語(yǔ)句執(zhí)行了else echo $(cc) != 不相等的語(yǔ)句執(zhí)行了endifcc=g++main: demo.c echo $(cc)ifneq ($(cc), gcc) echo $(cc) != gccelse echo $(cc) = gccendififdef 和 ifndef判斷變量是否被定義或者為空
foo = 1main: demo.c echo demoifdef foo echo define fooelse echo not define fooendifmain: demo.c echo demoifdef foo echo define fooelse echo not define fooendifMakefile當(dāng)中的函數(shù)在makefile當(dāng)中除了能夠使用條件表達(dá)式之外我們還可以使用函數(shù),在makefile當(dāng)中函數(shù)的使用規(guī)則如下:

經(jīng)驗(yàn)總結(jié)擴(kuò)展閱讀