1. 程式人生 > >makefile專題:預定義變數的使用

makefile專題:預定義變數的使用

關鍵詞: makefile中預定義的變數、自動變數的含義、特殊變數的含義

1. makefile中預定義的變數

  • 自動變數
    [email protected], $^, $<……
  • 特殊變數
    $(MAKE), $(MAKECMDGOALS), $(MAKEFILE_LIST)……

2. 自動變數的含義

  • [email protected]: 當前規則中觸發命令被執行的目標
  • $^:當潛規則中的所有依賴
  • $<:當前規則中的第一個依賴

3. 自動變數的使用示例

注意:
1)$對於makefile由特殊的含義,輸出時需要加上一個$進行轉義
2)

[email protected]對Bash Shell有特殊含義,輸出時需要加上\進行轉義

程式設計說明5_1:自動變數的使用示例


.PHONY : all first second third

all :cd  first second third
    @echo "\[email protected] => [email protected]"
    @echo "$$^ => $^"
	@echo "$$< => $<"

first:
second:
third:

輸出結果:

delphi@delphi-vm:
~/code/ch1_make/5/5_1$ make all [email protected] => all $^ => first second third $< => first

程式設計說明5_2:自動變數在工程中的應用


TARGET := hello.out
CC := gcc

## 將目標名和依賴用自動變數替換
$(TARGET) : func.o main.o  
    $(CC) -o [email protected] $^

func.o : func.c
    $(CC) -o [email protected] -c $^
main.o : main.c $(CC) -o [email protected] -c $^ .PHONY : clean rebuild all rebuild : clean all all : $(TARGET) clean : rm *.o $(TARGET)

4. 特殊變數的含義

  • $(MAKE)當前make直譯器的檔名
  • $(MAKECMDGOALS)命令列中指定的目標名(make的命令列引數)
  • $(MAKEFILE_LIST)make所需要處理的makefile檔案列表,當前makefile的檔名總是位於列表的最後,檔名之間以空格進行分隔
  • $(MAKE_VERSION):當前make直譯器的版本
  • $(CURDIR):當前make直譯器的工作目錄
  • $(.VARIABLES)所有已經定義的變數名列表(預定義變數和自定義變數)

程式設計說明5_3:特殊變數的使用示例1


.PHONY : all out first second third

all out : 
    @echo "\$$(MAKE) = > $(MAKE)"
    @echo "\$$(MAKECMDGOALS) => $(MAKECMDGOALS)"
    @echo "\$$(MAKEFILE_LIST) => $(MAKEFILE_LIST)"

輸出結果:

delphi@delphi-vm:~/code/ch1_make/5/5_3$ make
$(MAKE) = > make
$(MAKECMDGOALS) => 
$(MAKEFILE_LIST) =>  makefile
delphi@delphi-vm:~/code/ch1_make/5/5_3$ make all
$(MAKE) = > make
$(MAKECMDGOALS) => all
$(MAKEFILE_LIST) =>  makefile
delphi@delphi-vm:~/code/ch1_make/5/5_3$ make all out
$(MAKE) = > make
$(MAKECMDGOALS) => all out
$(MAKEFILE_LIST) =>  makefile
$(MAKE) = > make
$(MAKECMDGOALS) => all out
$(MAKEFILE_LIST) =>  makefile

程式設計說明5_3:特殊變數的使用示例2


.PHONY : test first second third 

first :
    @echo "first"

second :
    @echo "second"

third : 
    @echo "third"

test :
    $(MAKE) first
    $(MAKE) second
    $(MAKE) third

輸出結果:

[email protected]:~/code/ch1_make/5/5_3$ make test 
make first
make[1]: 正在進入目錄 `/home/delphi/code/ch1_make/5/5_3'
first
make[1]:正在離開目錄 `/home/delphi/code/ch1_make/5/5_3'
make second
make[1]: 正在進入目錄 `/home/delphi/code/ch1_make/5/5_3'
second
make[1]:正在離開目錄 `/home/delphi/code/ch1_make/5/5_3'
make third
make[1]: 正在進入目錄 `/home/delphi/code/ch1_make/5/5_3'
third
make[1]:正在離開目錄 `/home/delphi/code/ch1_make/5/5_3'

5. 小結

  • makefile提供了預定義變數供開發者使用
  • 預定義變數的使用能夠使得makefile的開發更高效
  • 自動變數是makefile中最常見的元素
  • 使用$(.VARIABLES)能夠獲取所有的特殊變數

宣告:此文章為本人在學習狄泰軟體學院《十二月提升計劃》所做的筆記,參考書籍《專業嵌入式軟體開發》——李雲,文章中包含狄泰軟體資料內容和《專業嵌入式軟體開發》資料內容,一切版權歸狄泰軟體《專業嵌入式軟體開發》所有!

相關推薦

makefile專題預定變數的使用

關鍵詞: makefile中預定義的變數、自動變數的含義、特殊變數的含義 1. makefile中預定義的變數 自動變數: [email protected], $^, $<

makefile 的主要預定變數及常用命令列選項

預定義變數                       含義$*               不包含副檔名的目標檔名稱。$+               所有的依賴檔案,以空格分開,並以出現的先後為序,可能包含重複的依賴檔案。$<               第一個依

makefile專題變數和不同的賦值方法

關鍵詞:makefile的變數、makefile中四種變數的賦值方式:簡單賦值:=、遞迴賦值=、條件賦值?=、追加賦值+= 1. makefile的變數 makefile中支援程式設計語言中變

【php手冊變數預定變數

'argc'包含命令列模式下傳遞給該指令碼的引數的數目(如果執行在命令列模式下)。' GATEWAY_INTERFACE '伺服器使用的 CGI 規範的版本。'SERVER_ADDR'當前執行指令碼所在的伺服器的 IP 地址。例:::1'SERVER_NAME'當前執行指令碼所在的伺服器的主機名。例:loca

Linux Shell基礎 環境變數、位置引數變數預定變數

環境變數   環境變數和使用者自定義變數最主要的區別在於,環境變數是全域性變數,而使用者自定義變數是區域性變數。使用者自定義變數只在當前的 Shell 中生效,而環境變數會在當前 Shell 和這個 Shell 的所有子 Shell 中生效。如果把環境變數寫入相應的配

Shell中的預定變數

Shell中的預定義變數 就是 shell 設計者事先已經定義好的變數,可以直接在 shell 指令碼中使用 基本語法 $$ (功能描述:當前程序的程序號(PID)) $! (功能描述:後臺執行的最後一個程序的程序號(PID)) $? (功能描述:最後一次執行的命令的返回狀態。如果這

nginx自定義變數與內建預定變數

總覽 nginx可以使用變數簡化配置與提高配置的靈活性,所有的變數值都可以通過這種方式引用: $變數名 而nginx中的變數分為兩種,自定義變數與內建預定義變數 內建變數 宣告 可以在sever,http,location等標籤中使用set命令(非唯一)宣告變數,語

PHP_Day03_預定變數

<?php /* 介紹:預定義變數 作者:趙某~ 時間:2018/11/5 */ // 預定義的儲存全域性變數的陣列 $GLOBALS $var = 'Xust'; echo $var.'<br>'; # 訪問某個全域性變數方

php幾個預定變數 SERVER 'DOCUMENT ROOT'

                <?phpecho 'documentroot:'.$_SERVER['DOCUMENT_ROOT'].'<br>'; //根目錄,在apache的配置檔案裡定義:httpd.conf 比如:DocumentRoot "D:/work/php_root"ech

Linux基礎學習之Shell基礎——Bash變數——預定變數

1、預定義變數 預定義變數 作用 $? 最後一次執行的命令的返回狀態。如果這個變數的值為,證明上一個命令正確執行;如果這個變數的值為非0(具體是哪個數,由命令自己來決定),則證明上一個命令執行不正確了。

MATLAB的使用(四)運算子、關係與邏輯函式說明以及預定變數名說明

四則表示式關係操作符和邏輯操作符及其功能: 關係操作符: < 表示小於; = 表示大於等於; 表示大於 ; == 表示等於; ~= 表示約等於; 邏輯操作符: &am

Linux Shell中的變數-預定變數

參考:《Linux命令 / 編輯器與Shell程式設計》 ################################################ note that :與其他程式語言不同,Bash中的變數沒有資料型別的區別,變數中的值都是以字串的形式儲存的,如果

CMake 預定變數

本帖子適用於初學者,StepByStep的入門CMake,CMake也是一門程式語言,只不過是針對編譯和連結這種程式構建的過程的語言,學習基本語法就可以初步入門,後面需要什麼複雜的功能,進階掌握需要自己去查詢官方文件,後續會給出查閱的一些方式

PHP中的預定變數$_SERVER引數詳解

     在PHP編碼中,經常遇到需要使用位址列的資訊,比如域名、訪問的URL、URL帶的引數等,這些資訊PHP伺服器都存在了預定義變數$_SERVER中。文件解釋:$_SERVER 是一個包含了諸如

STL學習之十三預定函式和函式介面卡

本文主要介紹預定義函式和函式介面卡。預定義好的函式物件,能實現不同型別的資料的運算, 實現了資料型別 和演算法的分離===》通過函式物件技術實現。下面是示例程式碼: #include "iostream" using namespace std; #include "ve

C++中幾個預定變數的介紹

       在C++程式設計中,有幾個預定義變數,這幾個預定義變數在使用的時候很方便。比如,在C++中中為了獲取時間,常常需要借用C語言的藉口time或者CTime類,然後如果是簡單的獲取時間,通過

makefile專題函式定義及呼叫

關鍵詞:makefile中的函式、自定義函式、預定義函式 1. makefile中的函式 make直譯器提供了一系列的函式供 makefile呼叫(即預定義函式,相當於庫函式) 在makefi

makefile專題自動生成依賴關係(續)

.PHONY : all clean rebuild MKDIR := mkdir RM := rm -rf CC := gcc DIR_DEPS := deps DIR_EXES := exes

Shell入門知識5——預定變數

基本介紹 shell已經定義好的變數,可以在shell指令碼直接使用。 基本語法 $$ 當前程序的程序號 $! 後臺執行的最後一個程序的程序號 $? 最後一次執行的命令的

shell的預定變數

1. 預定義變數 預定義變數和環境變數相類似,也是在Shell一開始時就定義了的變數。所不同的是,使用者只能根據Shell的定義來使用這些變數,而不能重定義它。所有預定義變數都是由$符和另一個符號組成的,常用的Shell預定義變數如下表所示 變數名 含義