1. 程式人生 > >Linux操作——帶函式的Makefile檔案的編寫

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目錄下。