Makefile檔案解析
阿新 • • 發佈:2019-01-24
在Makefile中,除第一條命令外,每一條命令的開頭必須是Tab製表符,比如:
CC= arm-linux-gcc
EXEC = hello
OBJS = hello.o
CFLAGS+=
LDFLAGS+=-static
all:$(EXEC)
$(EXEC):$(OBJS)
$(CC) $(LDFLAGS) -o [email protected] $(OBJS)
clean:
rm -f $(EXEC) *.elf *.gdb *.o
次Makefile檔案的幾個主要部分:
CFLAGS 編譯引數
LDFLAGS 連線引數(以上兩個是Makefile變數)
all: 編譯主入口
clean: 清除編譯結果
其中$(CC) $(LDFLAGS) -o [email protected] $(OBJS)和 rm -f $(EXEC) *.elf *.gdb *.o是命令,這兩行的開頭是Tab,其他行不能以Tab開頭。
可以這麼認為,Makefile中Tab開始的行代表是命令。
另外,以下是一些GNU make預定義變數:
$* 不包含副檔名的目標檔名稱
$+ 所有的依賴檔案,以空格分開,有序,可能包含重複的依賴檔案
$? 所有的依賴檔案,以空格分開,依賴檔案的修改日期比目標的建立日期晚
$^ 所有的依賴檔案,以空格分開,不包含重複的依賴檔案
$< 第一個依賴檔案的名稱
[email protected] 目標的完整名稱
若一行過長,可用反斜槓(/)作換行符,這樣就可以作為一行出理了。 一般make使用Makefile作為makefile檔案,若使用其他可使用命令: make -f makefile1
CC= arm-linux-gcc
EXEC = hello
OBJS = hello.o
CFLAGS+=
LDFLAGS+=-static
all:$(EXEC)
$(EXEC):$(OBJS)
$(CC) $(LDFLAGS) -o [email protected] $(OBJS)
clean:
rm -f $(EXEC) *.elf *.gdb *.o
次Makefile檔案的幾個主要部分:
CFLAGS 編譯引數
LDFLAGS 連線引數(以上兩個是Makefile變數)
all: 編譯主入口
clean: 清除編譯結果
其中$(CC) $(LDFLAGS) -o [email protected]
可以這麼認為,Makefile中Tab開始的行代表是命令。
另外,以下是一些GNU make預定義變數:
$* 不包含副檔名的目標檔名稱
$+ 所有的依賴檔案,以空格分開,有序,可能包含重複的依賴檔案
$? 所有的依賴檔案,以空格分開,依賴檔案的修改日期比目標的建立日期晚
$^ 所有的依賴檔案,以空格分開,不包含重複的依賴檔案
$< 第一個依賴檔案的名稱
[email protected] 目標的完整名稱
若一行過長,可用反斜槓(/)作換行符,這樣就可以作為一行出理了。 一般make使用Makefile作為makefile檔案,若使用其他可使用命令: make -f makefile1