一步一步寫Makefile(2):shell命令,萬用字元*和%區別,檔案路徑搜尋vpath VPATH
阿新 • • 發佈:2019-02-18
#################6:Makefile中也可以插入shell命令################
variable=main.o test1.o test2.o
main:$(variable)
cc -o main $(variable)
main.o:test1.o test2.o test1.h
clean:
rm *.o main #在Makefile中使用*萬用字元
print:
cat main.c #cat命令就是將檔案內容顯示到終端,在控制檯也可以使用這個命令
ls -al #這條命令也可以自行,可知在Makefile中可以執行命令
#rm $(variable) main 正確
#################7:在Makefile中使用萬用字元* 和% ################
variable=main.o test1.o test2.o
main:$(variable)
cc -o main $(variable)
#main.o:test1.o test2.o test1.h
%.o:test1.h
clean:
rm *.o main #在Makefile中使用*萬用字元
#可知:萬用字元%是make語法層的,如用在一條make的規則裡,目標依賴命令%.o:%.c;cc %.c
# 再如:$(patsubst%.c,%.o,$(wildcard *.c))
# 萬用字元*是用在shell語法層的,就是在控制終端可以輸入的命令,如rm *.o main
# 記憶方法,記住%,反面就是*
#################8:在Makefile中使用檔案路徑搜尋vpath VPATH################ variable=main.o test1.o test2.o #VPATH =./folder: ../header vpath %.c ./folder vpath %.h ../header #注意這些路徑都是基於當前原始檔編譯時的路徑,如在編譯main.c時它包含了test1.h標頭檔案,而test1.h #標頭檔案的路徑在main.c檔案所在路徑的上層目錄下的header資料夾下面。所以是vpath %.h ../header而#不是vpath %.h ./header main:$(variable) cc -o main $(variable) #main.o:test1.o test2.o test1.h %.o:test1.h clean: rm *.o main #在Makefile中使用*萬用字元 #include<stdio.h> //#include "test1.h" //#include "test1.h" //多次包含也不會出錯 int test2(void); int main(void) { printf("main.c\n"); test1(); test2(); }
#vpath是過濾篩選,不同型別的檔案到不同路徑下查詢,VPATH是統一對待,所有型別的檔案都到一個制定
#的#路徑下搜尋