Linux操作——帶函式的Makefile檔案的編寫
1、一般帶函式的Makefile檔案的編寫
I、程式檔案
在eg目錄下分別新建main.c、add.c、sub.c、mul.c、hello.c、“Makefile”檔案
其中main.c、add.c、sub.c、mul.c、hello.c程式檔案的編寫省略。
Makefile程式檔案如下:
src = $(wildcard *.c) #Makeile中變數不需要型別 #例如:src=abc #取變數的值用 $(變數) ==> $(src) ==> abc #$(wildcard *.c)匹配當前目錄下的所有.c檔案 obj = $(patsubst %.c, %.o, $(src)) #將src中的所有.c檔案變為.o檔案,再放到obj中 target = a.out all:$(target) $(target):$(obj) gcc $(obj) -o a.out main.o:main.c gcc -c main.c -o main.o #gcc -c:對檔案進行彙編,生成目標檔案 #gcc -o:給生成的檔案重新命名 add.o:add.c gcc -c add.c -o add.o sub.o:sub.c gcc -c sub.c -o sub.o mul.o:mul.c gcc -c mul.c -o mul.o clean: -rm -rf $(target) $(obj)
II、測試結果
[email protected]:/eg# make
gcc -c add.c -o add.o
gcc -c main.c -o main.o
gcc -c mul.c -o mul.o
gcc -c sub.c -o sub.o
gcc add.o main.o mul.o sub.o -o a.out
[email protected]:/eg# ./a.out
a + b = 3
a - b = -1
a * b = 30
結果同一般編寫的Makefile檔案執行結果相同,只是一些內容使用更具通用性的函式代替。
2、標準的Makefile檔案的編寫
I、程式
在eg目錄下分別新建main.c、add.c、sub.c、mul.c、hello.c、“Makefile”檔案
其中main.c、add.c、sub.c、mul.c、hello.c程式檔案的編寫省略。
Makefile程式檔案如下:
src1 = $(wildcard ./src/*.c) #Makeile中變數不需要型別 #例如:src=abc #取變數的值用 $(變數) ==> $(src) ==> abc #$(wildcard *.c)匹配當前目錄下的所有.c檔案 obj1 = $(patsubst ./src/%.c, ./obj/%.o, $(src1)) #將./src目錄下的所有.c檔案變為.o檔案,再存放到./obj目錄下 target = ./bin/a.out all:$(target) #all/ALL最終要生成的目標,不要寫命令 #將最終生成的a.out,存到./bin目錄下 $(target):$(obj1) gcc $(^) -o $(@) #$(^):代表規則中的所有依賴檔案,此處依賴檔案檔案是.o檔案 #$(@):代表規則中的目標檔案,此處目標檔案是a.out檔案 #a.out : main.o add.o mul.o sub.o #gcc main.o add.o mul.o sub.o -o a.out $(obj1):./obj/%.o:./src/%.c gcc -c $(^) -I ./include -o $(@) #因為依賴檔案是.c檔案,所以將.o檔案轉化為.c檔案 #-I:指定標頭檔案所在路徑 #main.o:main.c # gcc -c main.c -o main.o .PHONY:clean all clean: -rm -rf $(target) $(obj1)
II、測試結果
[email protected]:/eg# make
gcc -c src/add.c -I ./include -o obj/add.o
gcc -c src/main.c -I ./include -o obj/main.o
gcc -c src/mul.c -I ./include -o obj/mul.o
gcc -c src/sub.c -I ./include -o obj/sub.o
gcc obj/add.o obj/main.o obj/mul.o obj/sub.o -o bin/a.out
[email protected]:/eg# cd bin
[email protected]:/eg# ./a.out
a + b = 3
a - b = -1
a * b = 30
結果同一般帶函式的Makefile檔案執行結果相同。不過初始的依賴檔案存放在src目錄下,生成的.o檔案被存放在obj目錄下,生成的.out檔案存放在bin目錄下。