10.使用隱含規則
本系列文章均翻譯自make官方文件:make Manual,github同步專案:question
10.5 匹配規則與自動變數
10.5.1 匹配規則介紹
%
字元匹配任何非空字串。%
匹配到的字串叫做stem
(詞幹)。
prerequisites中的*%代表了目標中%匹配的同樣的stem*。
%.o : %.c ; recipe…
要求xxx.c必須存在或者可以建立。
10.5.4 模式是如何匹配的
模式不包括/
時,檔名中的目錄名會被先移除,匹配完檔名的部分之後,再把目錄部分加上來。例:
e%t匹配檔案src/eat,stem就是src/a。
note:已經存在或被引用的prerequisites的優先順序總是比需要被其它隱含規則建立的prerequisites高。
多個匹配規則滿足時:
- make會選擇stem最短的那個規則。
- 如果stem等長,選擇第一個發現的規則。
10.5.5 匹配任何檔案的模式規則
模式規則的目標只是一個%
的時候,它會匹配任何一個檔名,稱作match-anything規則。
每次定義這種規則的時候,必須選擇下面的一項進行約束:
- 使用
::
標記規則為terminal,只有prerequisites已經存在的時候才能應用規則。 - 非終端規則。non-terminal match-anything rule不能應用於指定了檔案型別的檔名。???
10.5.3 自動變數
自動變數只在recipe
中生效。但是,make的二次擴充套件特性(see Secondary Expansion)允許在prerequisites
中使用自動變數的值。
- $@ - 目標檔名。目標是歸檔成員時,代表的是歸檔檔名。在有多個生成目標的匹配規則情況下,代表了任何引起recipe執行的目標檔案。
- @代表foo.a,$%*代表bar.o。
- $< - 第一個prerequisites的名字。如果目標從隱含規則執行recipe,這會成為第一個prerequisite。see Implicit Rules.
- $? - 所有的比目標新的prerequisites的名字,空格分隔。對於是歸檔成員的prerequisites,只有命名的成員被使用。???
- $^ - 所有的prerequisites,空格分隔。歸檔成員的規則同上。如果prerequisites中有重複多次的prerequisite,那麼該變數只會包含一個重複的prerequisite。此變數不包括order-only prerequisites(指只有目標不存在的時候才會參與目標的生成的prerequisites,與常規的用
|
分隔)。 - ^`類似,不過它包含重複的prerequisite。
- $| - 所有的
order-only prerequisites
,空格分隔。 - $* - 隱含規則匹配的詞幹。以後再看!!!
- @=‘dir/foo.a’,$(@D)=‘dir’。如果目標沒有
/
,此值為.
。 - (notdir $@)`相等。
以下變數都是類似的:
- $(*D)
- $(*F)
- $(%D)
- $(%F)
- $(<D)
- $(<F)
- $(^D)
- $(^F)
- $(+D)
- $(+F)
- $(?D)
- $(?F)
相關文章
- 【小白學演算法】10.遞迴的呼叫機制、使用時要注意的規則演算法遞迴
- oracle資料隱式轉換規則Oracle
- 10. 正規表示式匹配
- Leetcode 10. 正規表示式匹配LeetCode
- react中的 Hook 使用規則ReactHook
- 使用者識別規則
- iptables 常用規則使用例項
- 【教程搬運】分析並編寫suricata規則(內含兩個示例)
- 關於laravel使用自定義驗證規則後某些規則不生效Laravel
- 使用隱含引數testMappingSpeed排查GoldenGate抽取慢的步驟APPGo
- 快速整合和使用 drools 規則引擎
- MySQL觸發器的使用規則MySql觸發器
- jQuery Validate驗證規則的使用jQuery
- jQuery Validate驗證規則使用演示jQuery
- 規則
- pbootcms偽靜態設定教程含apache、naginx、IIS不同環境配置規則bootApache
- drools規則屬性(rule attributes)的使用
- VSCode 使用 eslint 規則格式化 jsVSCodeEsLintJS
- 正則匹配規則2
- 安卓應用安全指南5.5.2處理隱私資料規則書安卓
- url規則
- makefile規則
- ESlint規則EsLint
- canvas非零繞組規則與奇偶規則Canvas
- 使用jakarta.validation自定義校驗規則
- Debian使用iptables-persistent持久化iptables規則持久化
- [20190417]隱含引數_SPIN_COUNT.txt
- 常用指令碼:獲取隱含引數指令碼
- 正則匹配規則記錄
- Angular8 form 表單對隱藏元素取消表單校驗規則AngularORM
- SMART原則的定義和含義
- firewalld:direct規則
- URule規則引擎
- 1、基本規則
- 任務規則
- IT職場規則
- git提交規則Git
- 正規表示式基本規則