makefile裡有許許多多的符號,對於新手而言如果沒有經常使用,就很容易忘記,所以我把常見符號的意義寫下,方便日後忘記查詢。本文章會持續更新...
1.$@:代表目標;$^代表所有依賴,$^代表第乙個依賴。
eg:下圖的$@代表目標名test,$^代表所有依賴,即test.c和seqlist.c,所以相當於gcc -o0 -g -wall -o test test.c seqlist.c。
cc = gcc #使用gcc編譯器
cflags =-o0 -g -wall #-o0代表編譯的時候不進行相應的優化;
#-g代表可以使用gdb進行相應的除錯,編譯的時候會新增一些除錯資訊
#-wall把警告資訊全都列印出來
test:test.c seqlist.c
$(cc) $(cflags) -o $@ $^
2..phony:假設我們的makefile所在目錄下,剛好有名為clean的檔案,那麼我們執行make clean這條規則時並不能執行rm *.o test,如果加上.phony:,則可以成功執行rm *.o test.(因為每條規則下的命令被執行必需滿足以下情況之一:1.目標在當前路徑不存在;2.某個依賴比目標「新」,假如我們當前路徑有clean檔案,而makefile裡面的clean又沒有依賴檔案,所以就會發生錯誤啦!)
test: a.o b.o c.o
gcc -o test $^
%.o : %.c
gcc -c -o $@ $<
clean:
rm *.o test
.phony: clean
3.
:=# 即時變數,a := *** # a的值即刻確定,在定義時即確定
=# 延時變數,b = *** # b的值使用到時才確定
?=# 延時變數, 如果是第1次定義才起效, 如果在前面該變數已定義則忽略這句
+=# 附加, 它是即時變數還是延時變數取決於前面的定義
a := $(c) #即時變數,定義時即確定,因為變數c還未賦值,所以a為空
b = $(c) #延時變數,用到時才確定,所以列印b為abc 123
c = abc
d = aabbcc
d ?= 123456 #在上一行已經定義了變數的,所以根據?=的特性,d列印出來是aabbcc
all:
@echo a = $(a)
@echo b = $(b)
@echo d = $(d)
c += 123
在makefile檔案中, 符號代表什麼意思?
archclean makeboot clean 或者checkbin bin ture true 這裡面 和 代表著什麼意思啊?makeboot 是變數 makeboot 的值,表示在make時不輸出make的資訊 類似windows下的echo off 我正在看vivi的makefile檔案,其...
Make File符號說明
用途define 定義乙個 資料報 是用enddef做結尾,可以包含多行的命令。ifeq ifneq 條件判斷,可以搭配else使用,endif結尾。原型 ifeq arg1,arg2 ifdef ifndef 變數是否定義的條件判斷,可以搭配else使用,endif結尾。原型 ifdef var。...
Make File符號說明
用途 define 定義乙個 資料報 是用enddef做結尾,可以包含多行的命令。ifeq ifneq 條件判斷,可以搭配else使用,endif結尾。原型 ifeq arg1,arg2 ifdef ifndef 變數是否定義的條件判斷,可以搭配else使用,endif結尾。原型 ifdef var...