本文銜接上文部分代碼。
GNU的Make工具除了提供建立目标的基本功能之外,還有許多其他功能,其中之一就是變量或者宏的定義能力。
program:main.o add.o dec.o div.o mul.o
gcc main.o add.o dec.o div.o mul.o -o program
字元串“main.o add.o dec.o div.o mul.o”被調用了兩次,當出現大量程式更改極為不友善。于是這裡出現了可以定義變量用來代替大量出現的.o檔案名稱。
在Makefile檔案中可以這樣定義:
objects=main.o add.o dec.o div.o mul.o
将代碼更改為:
#makefile
objects = main.omain.o add.o dec.o mul.o div.o
program: $(objects)
gcc $(objects) -o program
main.o:main.c main.h
gcc -c main.c -o main.o
add.o:add.c
gcc -c add.c -o add.o
dec.o:dec.c
gcc -c dec.c -o dec.o
mul.o:mul.c
gcc -c mul.c -o mul.o
div.o:div.c
gcc -c div.c -o div.o
clean:
rm *.o program
效果圖:
之後如果有新的.o檔案加入,隻需要修改objects變量即可。
在Makefile中定義變量中有兩種形式,一種是遞歸展開方式,另一種是簡單方式。
Make中變量格式是:$(VAR)
Makefile中變量分為使用者自定義變量,預定義變量,自動變量及環境變量。如objects是使用者自定義變量,關于其他三個變量在網上都可以查到,在此不多贅述。
自動變量中:
$^ 所有不重複的依賴檔案,都以空格分開
$@ 目标檔案的完整名稱
我編寫一個makefile檔案,在檔案中引入預定義變量“CC”和“CFLAGS”,自動變量“$^”和“$@”。對于初學者很難,熟練掌握之後,就會發現這樣增加了makefile編寫靈活度。
objects = main.omain.o add.o dec.o mul.o div.o
program: $(objects)
CC=gcc
CFLAGS=-Wall -O -g
$(CC) $(CFLAG) -o $@
main.o:main.c main.h
$(CC) $(CFLAG) -c main.c -o main.o
add.o:add.c
$(CC) $(CFLAG) -c add.c -o add.o
dec.o:dec.c
$(CC) $(CFLAG) -c dec.c -o dec.o
mul.o:mul.c
$(CC) $(CFLAG) -c mul.c -o mul.o
div.o:div.c