【Makefile由浅入深完全学习记录5】预定义变量的使用
今天學(xué)習(xí)Makefile預(yù)定義變量的使用,加qq:1126137994.微信:liu1126137994一起學(xué)習(xí)更多技術(shù)!!!
1.預(yù)定義變量:自動(dòng)變量
在Makefile中存在一些預(yù)定義過的變量,我們可以直接拿來使用而不用自己再定義
- 自動(dòng)變量
- 特殊變量
我們先來看看特殊變量的意義:
-$@
*代表當(dāng)前規(guī)則中,觸發(fā)命令后,會被執(zhí)行的目標(biāo)
-$^
*代表當(dāng)前規(guī)則中的所有的依賴
-$<
*代表當(dāng)前規(guī)則中的第一個(gè)依賴
自動(dòng)變量的使用示例如下所示:
all : first second third@echo "\$$@ => $@"@echo "$$^ => $^"@echo "$$< => $<"注意:
1. "$"對于Makefile來講具有特殊含義,所以輸出時(shí),要加一個(gè)"$"進(jìn)行轉(zhuǎn)義2. "$@"隊(duì)友Bash shell 具有特殊意義,所以輸出時(shí)需要加上"\"進(jìn)行轉(zhuǎn)義下面給出一個(gè)例子來理解上述的概念:
.PHONY : all first second third all : first second third@echo "\$$@ => $@"@echo "$$^ => $^"@echo "$$< => $<"firtst: second: third:輸入make運(yùn)行后,顯示:
下面我們將第四課的Makefile修改一下,使用自動(dòng)變量讓內(nèi)容更簡潔(點(diǎn)擊查看第四課的博客:第四課內(nèi)容)
CC := g++ TARGET := hello-world.out$(TARGET) : func.o main.o$(CC) -o $(TARGET) func.o main.ofunc.o : func.c$(CC) -o func.o -c func.cmain.o : main.c$(CC) -o main.o -c main.c.PHONY : rebuild clean allrebuild : clean allall : $(TARGET)clean :rm *.o $(TARGET)將上述Makefile修改為以下的內(nèi)容:
CC := g++ TARGET := hello-world.out$(TARGET) : func.o main.o$(CC) -o $@ $^func.o : func.c$(CC) -o $@ -c $^main.o : main.c$(CC) -o $@ -c $^.PHONY : rebuild clean allrebuild : clean allall : $(TARGET)clean :$(RM) *.o $(TARGET)可以看出,使用自動(dòng)變量后,Makefile的內(nèi)容變得更簡潔!!!
2.預(yù)定義變量:特殊變量
一些特殊變量的意義:
- $(MAKE) 當(dāng)前make解釋器的文件名
- $(MAKECMDGOALS) 命令行中指定的目標(biāo)名(make的命令行參數(shù))
- $(MAKEFILE_LIST) make所需要處理的makefile文件列表,當(dāng)前makefile的文件名總是處于列表最后,文件名之間以空格分離
看下面的例子來更加深刻的理解上述三個(gè)變量的意義:
.PHONY : all out first second third testall out : @echo "$(MAKE)"@echo "$(MAKECMDGOALS)"@echo "$(MAKEFILE_LIST)"first :@echo "first"second :@echo "second"third :@echo "third"test :@$(MAKE) first@$(MAKE) second@$(MAKE) third輸入:make test:
輸入:make all :
輸入:make first :
一些特殊變量的意義:
- $(MAKE_VERSION) 代表當(dāng)前make解釋器的版本
- $(CURDIR) 代表當(dāng)前make解釋器的工作目錄
- $(.VARIABLES) 所有已經(jīng)定義了的變量名列表(預(yù)定義和自定義的變量都包括在內(nèi))
看下面一個(gè)例子來理解一下上面三個(gè)特殊變量的意義與使用方法:
.PHONY : test1 test2TDelphi := Delphi Tang D.T.Software := D.T.test1 :@echo "$(MAKE_VERSION)"@echo "$(CURDIR)"@echo "$(.VARIABLES)"test2 :@echo "$(RM)"輸入make運(yùn)行結(jié)果為:
從上面運(yùn)行結(jié)果可以看出我的make的版本是:3.81 make解釋器的目錄為:/home/delphi 而且可以在變量名列表中找到我們定義的變量D.T.Software 與 TDelphi
3.總結(jié)
想一起探討以及獲得各種學(xué)習(xí)資源加我:
qq:1126137994
微信:liu1126137994
可以共同交流關(guān)于嵌入式,操作系統(tǒng),C++語言,C語言,數(shù)據(jù)結(jié)構(gòu)等技術(shù)問題。
總結(jié)
以上是生活随笔為你收集整理的【Makefile由浅入深完全学习记录5】预定义变量的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Cisco命令大全(清除配置和恢复口令)
- 下一篇: 有哪些好用的低代码开发平台?