日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Makefile由浅入深完全学习记录5】预定义变量的使用

發布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Makefile由浅入深完全学习记录5】预定义变量的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天學習Makefile預定義變量的使用,加qq:1126137994.微信:liu1126137994一起學習更多技術!!!

1.預定義變量:自動變量

在Makefile中存在一些預定義過的變量,我們可以直接拿來使用而不用自己再定義

  • 自動變量
$@ , $^ , $<
  • 特殊變量
$(MAKE) , $(MAKECMDGOALS) , $(MAKEFILE_LIST) , $(MAKE_VERSION) , $(CURDIR) , $(.VARIABLES) ...

我們先來看看特殊變量的意義:
-$@
*代表當前規則中,觸發命令后,會被執行的目標

-$^
*代表當前規則中的所有的依賴

-$<
*代表當前規則中的第一個依賴

自動變量的使用示例如下所示:

all : first second third@echo "\$$@ => $@"@echo "$$^ => $^"@echo "$$< => $<"

注意:

1. "$"對于Makefile來講具有特殊含義,所以輸出時,要加一個"$"進行轉義2. "$@"隊友Bash shell 具有特殊意義,所以輸出時需要加上"\"進行轉義

下面給出一個例子來理解上述的概念:

.PHONY : all first second third all : first second third@echo "\$$@ => $@"@echo "$$^ => $^"@echo "$$< => $<"firtst: second: third:

輸入make運行后,顯示:

下面我們將第四課的Makefile修改一下,使用自動變量讓內容更簡潔(點擊查看第四課的博客:第四課內容)

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修改為以下的內容:

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)

可以看出,使用自動變量后,Makefile的內容變得更簡潔!!!

2.預定義變量:特殊變量

一些特殊變量的意義:

  • $(MAKE) 當前make解釋器的文件名
  • $(MAKECMDGOALS) 命令行中指定的目標名(make的命令行參數)
  • $(MAKEFILE_LIST) make所需要處理的makefile文件列表,當前makefile的文件名總是處于列表最后,文件名之間以空格分離

看下面的例子來更加深刻的理解上述三個變量的意義:

.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) 代表當前make解釋器的版本
  • $(CURDIR) 代表當前make解釋器的工作目錄
  • $(.VARIABLES) 所有已經定義了的變量名列表(預定義和自定義的變量都包括在內)

看下面一個例子來理解一下上面三個特殊變量的意義與使用方法:

.PHONY : test1 test2TDelphi := Delphi Tang D.T.Software := D.T.test1 :@echo "$(MAKE_VERSION)"@echo "$(CURDIR)"@echo "$(.VARIABLES)"test2 :@echo "$(RM)"

輸入make運行結果為:

從上面運行結果可以看出我的make的版本是:3.81 make解釋器的目錄為:/home/delphi 而且可以在變量名列表中找到我們定義的變量D.T.Software 與 TDelphi

3.總結

  • makefile中提供了預定義變量供開發者使用
  • 預定義變量的使用能夠使開發變得更加高效
  • 自動變量是makefile中最常見的變量
  • 使用$(.VARIABLES)能夠獲取所有的特殊變量
  • 想一起探討以及獲得各種學習資源加我:
    qq:1126137994
    微信:liu1126137994
    可以共同交流關于嵌入式,操作系統,C++語言,C語言,數據結構等技術問題。

    總結

    以上是生活随笔為你收集整理的【Makefile由浅入深完全学习记录5】预定义变量的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。