1. 程式人生 > >一步一步寫Makefile(2):shell命令,萬用字元*和%區別,檔案路徑搜尋vpath VPATH

一步一步寫Makefile(2):shell命令,萬用字元*和%區別,檔案路徑搜尋vpath VPATH


#################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是統一對待,所有型別的檔案都到一個制定

##路徑下搜尋