makefile變量
- makefile中支持程序設(shè)計(jì)語(yǔ)言中變量的概念
- makefile中的變量只代表文本數(shù)據(jù)(字符串)
- makefile中的變量名規(guī)則
--變量名可以包含字符唉工,數(shù)字研乒,下劃線
--不能包含“:”、“#”淋硝,“=”或“ ”
--變量名大小寫(xiě)敏感
變量的定義和使用
變量的定義使用 "name := value" :
CC := gcc
TARGET := hello.out
變量的使用"$(name)":
$(TARGET) : func.o main.o
$(CC) -o $(TARGET) func.o main.o
編程示例1
func.c源文件如下:
void fun()
{
printf("void fun():hello makefile \n");
}
main.c源文件如下:
extern void fun();
int main()
{
fun();
return 0;
}
makefile源文件如下:
CC := gcc
TARGET := hello.out
hello.out :main.o func.o
$(CC) -o $(TARGET) main.o func.o
main.o:main.c
$(CC) -o main.o -c main.c
func.o:func.c
$(CC) -o func.o -c func.c
.PHONY:rebuild clean all
rebuild:clean all
all:$(TARGET)
clean:
rm *.o $(TARGET)
命令行執(zhí)行結(jié)果如下:
分析:從執(zhí)行結(jié)果來(lái)看雹熬,調(diào)用$(CC)相當(dāng)于調(diào)用了gcc,調(diào)用$(TARGET)相當(dāng)于調(diào)用了hello.out谣膳。代碼實(shí)現(xiàn)了將gcc和hello.out作為變量的值竿报,在執(zhí)行的時(shí)候調(diào)用變量也就相當(dāng)于調(diào)用了變量的值本身。
引用變量继谚,有助于維護(hù)代碼烈菌,當(dāng)需要改變編譯器和目標(biāo)名稱的時(shí)候,代碼維護(hù)性很強(qiáng)花履,改動(dòng)性很小芽世。參看編程示例2
編程示例2
main.c func.c 文件內(nèi)容均與編程實(shí)驗(yàn)1保持一致,修改makefile中編譯器和目標(biāo)文件的名稱臭挽;makefile代碼如下:
CC := g++
TARGET := hello-world.out
hello.out :main.o func.o
$(CC) -o $(TARGET) main.o func.o
main.o:main.c
$(CC) -o main.o -c main.c
func.o:func.c
$(CC) -o func.o -c func.c
.PHONY:rebuild clean all
rebuild:clean all
all:$(TARGET)
clean:
rm *.o $(TARGET)
命令行執(zhí)行結(jié)果如下:
makefile中變量的4中賦值方式(不同的賦值方式意義不同捂襟!)
- 簡(jiǎn)單賦值(:=)
- 遞歸賦值(=)
--影響的變量可能會(huì)是多個(gè) - 條件賦值(?=)
--適用于第一次定義的變量。
--如果當(dāng)前要賦值的變量已經(jīng)被定義過(guò)欢峰,則變量值不會(huì)被改變葬荷。 - 追加賦值(+=)
--類似于字符串的拼接
簡(jiǎn)單賦值(:=)
- 程序設(shè)計(jì)語(yǔ)言中的通用的賦值方式
-
只針對(duì)當(dāng)前語(yǔ)句的變量有效
遞歸賦值(=)
- 賦值操作可能影響多個(gè)其它變量
-
所有與目標(biāo)變量相關(guān)的其它變量都將受到影響
條件賦值(?=)
- 如果變量未定義,使用賦值符號(hào)中的值定義變量
-
如果變量已經(jīng)定義纽帖,賦值無(wú)效
追加賦值(+=)
- 原變量值之后加上一個(gè)新值
-
原變量值與新值之間由空格隔開(kāi)