1. 程式人生 > >make的引數以及Makefile中的自動變數

make的引數以及Makefile中的自動變數

最近把Makefile相關的內容稍微梳理了一遍,記錄下一些常用的內容,這篇寫下引數和自動變數吧,首先make的引數:

make的引數

常用:

“-q”

“--question”

這個引數的行為是找目標的意思,也就是說,如果目標存在,那麼其什麼也不會輸出,

當然也不會執行編譯,如果目標不存在,其會打印出一條出錯資訊。

“-B”

“--always-make”

認為所有的目標都需要更新(重編譯)。

“-C <dir>”

“--directory=<dir>”

指定讀取makefile的目錄。如果有多個“-C”引數,make的解釋是後面的路徑以前面的

作為相對路徑,並以最後的目錄作為被指定目錄。如:“make –C /home/test –C prog”

等價於“make –C /home /test/prog”。

“-e”

“--environment-overrides”

指明環境變數的值覆蓋makef

“-f=<file>”

“--file=<file>”

“--makefile=<file>”

指定需要執行的makefile。

“-h”

“--help”

顯示幫助資訊。

“-i”

“--ignore-errors”

在執行時忽略所有的錯誤。

“-I <dir>”

“--include-dir=<dir>”

指定一個被包含makefile的搜尋目標。可以使用多個“-I”引數來指定多個目錄。

“-k”

“--keep-going”

出錯也不停止執行。如果生成一個目標失敗了,那麼依賴於其上的目標就不會被執行了。

“-l <load>”

“--load-average[=<load]”

“—max-load[=<load>]”

指定make執行命令的負載。

“-o <file>”

“--old-file=<file>”

“--assume-old=<file>”

不重新生成的指定的<file>,即使這個目標的依賴檔案新於它。

“-r”

“--no-builtin-rules”

禁止make使用任何隱含規則。

“-s”

“--silent”

“--quiet”

在命令執行時不輸出命令的輸出。

“-v”

“--version”

輸出make程式的版本、版權等關於make的資訊。

“-w”

“--print-directory”

輸出執行makefile之前和之後的資訊。這個引數對於跟蹤巢狀式呼叫make時很有用。

自動化變數

所謂自動化變數,就是這種變數會把模式中所定義的一系列的檔案自動地挨個取出,直至所有的符合模式的檔案都取完了。這種自動化變數

只應出現在規則的命令中。

常用自動化變數:

[email protected]

表示規則中的目標檔案集。在模式規則中,如果有多個目標,那麼,"[email protected]"就是匹配於

目標中模式定義的集合。

$%

僅當目標是函式庫檔案中,表示規則中的目標成員名。例如,如果一個目標是"foo.a

(bar.o)",那麼,"$%"就是"bar.o","[email protected]"就是"foo.a"。如果目標不是函式庫檔案(Unix

下是[.a],Windows下是[.lib]),那麼,其值為空。

$<

依賴目標中的第一個目標名字。如果依賴目標是以模式(即"%")定義的,那麼"$<"將

是符合模式的一系列的檔案集。注意,其是一個一個取出來的。

$?

所有比目標新的依賴目標的集合。以空格分隔。

$^

所有的依賴目標的集合。以空格分隔。如果在依賴目標中有多個重複的,那個這個變數

會去除重複的依賴目標,只保留一份。

$+

這個變數很像"$^",也是所有依賴目標的集合。只是它不去除重複的依賴目標。

$*

這個變量表示目標模式中"%"及其之前的部分。如果目標是"dir/a.foo.b",並且目標的模

式是"a.%.b",那麼,"$*"的值就是"dir/a.foo"。這個變數對於構造有關聯的檔名是比

較有較。如果目標中沒有模式的定義,那麼"$*"也就不能被推匯出,但是,如果目標文

件的字尾是make所識別的,那麼"$*"就是除了字尾的那一部分。例如:如果目標

是"foo.c",因為".c"是make所能識別的字尾名,所以,"$*"的值就是"foo"。這個特性

是GNU make的,很有可能不兼容於其它版本的make,所以,你應該儘量避免使用"$

*",除非是在隱含規則或是靜態模式中。如果目標中的字尾是make所不能識別的,那

麼"$*"就是空值。

當你希望只對更新過的依賴檔案進行操作時,"$?"在顯式規則中很有用。

四個變數([email protected]、$<、$%、$*)在擴充套件時只會有一個文

件,而另三個的值是一個檔案列表。這七個自動化變數還可以取得檔案的目錄名或是在

當前目錄下的符合模式的檔名,只需要搭配上"D"或"F"字樣。"D"的含義就是

Directory,就是目錄,"F"的含義就是File,就是檔案。

$(@D)

表示"[email protected]"的目錄部分(不以斜槓作為結尾),如果"[email protected]"值是"dir/foo.o",那

麼"$(@D)"就是"dir",而如果"[email protected]"中沒有包含斜槓的話,其值就是"."(當前目錄)。

$(@F)

表示"[email protected]"的檔案部分,如果"[email protected]"值是"dir/foo.o",那麼"$(@F)" 就

是"foo.o","$(@F)"相當於函式"$([email protected])"。

"$(%D)"

"$(%F)"

分別表示了函式包檔案成員的目錄部分和檔案部分。

"$(<D)"

"$(<F)"

分別表示依賴檔案的目錄部分和檔案部分。

"$(^D)"

"$(^F)"

分別表示所有依賴檔案的目錄部分和檔案部分。(無相同的)

"$(+D)"

"$(+F)"

分別表示所有依賴檔案的目錄部分和檔案部分。(可以有相同的)

"$(?D)"

"$(?F)"

分別表示被更新的依賴檔案的目錄部分和檔案部分。

對於"$<",為了避免產生不必要的麻煩,我們最好給$後面的那個特定字元都加上圓括號,比如,"$(<)"就要比"$<"要好一些。



相關推薦

make引數以及Makefile自動變數

最近把Makefile相關的內容稍微梳理了一遍,記錄下一些常用的內容,這篇寫下引數和自動變數吧,首先make的引數: make的引數 常用: “-q” “--question” 這個引數的行為是找目標的意思,也就是說,如果目標存在,那麼其什麼也不會輸出, 當然也不會執行編

【三】makefile變數

一、變數賦值 直接展開式 := 特點:在定義時立即展開應用的變數 示例: value1 := 5 value2 := $(value1) #value2會立即被賦值成5 value1 :=6 var-test: @echo "value2", $(value2)

核心配置命令列引數以及Uboot設定環境變數bootargs裡面的init=/linuxrc解析

根檔案系統的啟動及配置!(小壽原創)www.diybl.com 時間:2008-07-03 作者:佚名 編輯:本站 點選: 314 [評論] - - 按啟動順序依次介紹相關的檔案: 一、核心啟動完之後,首先執行/linuxrc。 /linuxrc內容: ----------

關於makefile自動產生依賴的理解

本博文是在學習了《GNU Make中文手冊》後記錄下來的自己的關於自動產生makefile依賴的語句的理解,向大家分享。 《GNU make中文手冊》中的相關章節見一下連結: http://blog.csdn.net/gmpy_tiger/article/details/5

makefile 特殊變數的使用

1.源程式的編譯 在Linux下面,如果要編譯一個C語言源程式,我們要使用GNU的gcc編譯器。 下面我們以一個例項來說明如何使用gcc編譯器。 假設我們有下面一個非常簡單的源程式(hello.c): int main(int argc,char **argv) { pri

Makefile變數

Makefile中變數有以下幾個特徵: 1. Makefile中變數和函式的展開(除規則命令列中的變數和函式以外),是在make讀取makefile檔案時進行的,這裡的變數包括了使用“=”定義和使用指示符“define”定義的。 2. 變數可以用來代表一個檔名列表、編譯選項列表、程式執行的選項引數列表、搜尋

Makefile引用變數時大括號和小括號有啥區別?

如題。 Makefile中可以通過$(Var)或者${Var}的方式引用變數"Var", 我想問一下大括號應用跟小括號引用有啥區別?我有碰到過一個問題,通過小括號在某些情況下引用環境變數一直失敗,但大括號就可以,望各位達人給個正解,謝謝!------解決方案--------

MakeFile變數定義

   一般在我們書寫Makefile時,各部分變數引用的格式我們建議如下:1. make變數(Makefile中定義的或者是make的環境變數)的引用使用“$(VAR)”格式。 2. 出現在規則命令列中shell變數(一般為執行命令過程中的臨時變數,它不屬於Makefile變

Makefile變數和shell變數

我們在寫makefile時 多多少少會用到shell指令碼, 對於變數的在shell中的使用有一些要注意的細節。讓我們從一個簡單的makefile來看看。 注意makefile中一定要有一個目標,且一

Makefile常用自動變數

自動變數含義 $*不包含副檔名的目標檔名稱 $+所有的依賴檔案,以空格分開,並以出現的先後為序,可能包含重複的依賴檔案 $<第一個依賴檔案的名稱 $?所有時間戳比目標檔案晚的依賴檔案,並以空格分開 [email protected]目標檔案的完整名稱 $^所

linuxmake命令的簡單使用以及Makefile檔案的書寫

Makefile    會不會寫makele,從一個側面說明了一個是否具備完成大型工程的能力。    一個工程中的源件不計數,其按型別、功能、模組分別放在若干個目錄中,makele定義了一系列的規則來指

AS3通過事件監聽傳遞引數以及動態變數傳遞的問題

 在AS3中,新增監聽,可以通過一種簡單的方式傳遞引數 如: column1.addEventListener(MouseEvent.MOUSE_OVER,function(e:MouseEvent){onMouseOverEvent(e,subRisk.days); });

關於makefile變量的多次賦值以及override指令

順序 使用 += 令行 所有 命令 也不會 makefile err 1 基本原則如下 1.1 原則1 變量的普通賦值是有先後順序的,後面的賦值會覆蓋掉前面的賦值。 1.2 原則2 使用的時候,用的是其前面最後的賦值,就算其後面有使用了override指令的賦值也不會影響這

Makefile常見的自動變量和含義

makefile info 自動 vmm var p s xms userinfo href 劫V3W71v9QGW貝膳http://jz.docin.com/cjwjy04096 1姥樸5KAQ訪顯39http://shufang.docin.com/fjqbs11

Android小知識-剖析RetrofitServiceMethod相關引數以及建立過程

本平臺的文章更新會有延遲,大家可以關注微信公眾號-顧林海,包括年底前會更新kotlin由淺入深系列教程,目前計劃在微信公眾號進行首發,如果大家想獲取最新教程,請關注微信公眾號,謝謝! 在上一節《Android小知識-剖析Retrofit中的網路請求介面》介紹了在Retrofit中通過動態代理獲取網

makemakefile 五 使用變數

在Makefile中的定義的變數,就像是C/C++語言中的巨集一樣,他代表了一個文字字串,在Makefile中執行的時候其會自己主動原模原樣地展開在所使用的地方。其與C/C++所不同的是,你能夠在Makefile中改變其值。在Makefile中,變數能夠使用在“目標”,“依賴目標”,“命令”或是

uboot的主Makefile變數MKCONFIG建立符號連結相關問題

在uboot的主Makefile中,定義了一個變數:MKCONFIG    := $(SRCTREE)/mkconfig。 該MKCONFIG 變數即為源程式目錄下的mkconfig指令碼檔案,該檔案在uboot的前期配置操作時會用到。 x210_sd_conf

關於IDEAJava Compiler以及專案language level老是自動回撥的解決方法

轉載務必說明出處:https://blog.csdn.net/LiaoHongHB/article/details/83900387        在我們使用idea對專案進行編譯執行時,經常會出現 Error:(38, 44) java: -source

C#out,ref,Parse的的引數以及使用方法

out的使用方法 1.如果方法的引數用out修飾了。那麼這個引數必須在方法裡進行賦值。 2.out修飾方法的引數了,那麼在方法外面,可以被給這個引數賦值,但在方法裡面必須給這個out修飾符的引數賦值 3.另外,引數加out,是把這個方法中的引數的值傳到方法外面了。 如以下例項

eclipse自動提示設定以及問題:去除變數自動提示(圖文詳解)

原文:https://blog.csdn.net/qq_34114951/article/details/76946320   第一件事 eclipse設定為自動提示 配置步驟: 1 Window > Preferences > Java > Editor &