5.編寫recipe
本系列文章均翻譯自make官方文件:make Manual,github同步專案:question
使用者使用不同的shell程式,但是在makefiles總是使用/bin/sh
執行recipe,除非makefile指定了其它的shell。
recipe語法
Makefile有兩種語法:make語法和shell語法。make不會去理解shell語法,執行簡單的翻譯就交給shell去處理。recipe使用的是shell語法。
每個recipe所在行都要有tab開頭,除了第一行recipe可能會被附加到目標行(分號隔開)。
分割recipe行
例1:
all :
@echo no\
space
@echo no\
space
@echo one \
space
@echo one\
space
輸出:
nospace
nospace
one space
one space
例2:
all : ; @echo 'hello \
world' ; echo "hello \
world"
輸出:
hello \
world
hello world
想要使用單引號,並且不想出現\
,那麼可以將其轉換為make變數:
HELLO = 'hello \
world'
all : ; @echo $(HELLO)
輸出:
hello world
在recipes中使用變數
不會重新構建的目標不會被擴充套件,即不會呼叫新的recipe。
如果想要$
出現在recipe中,必須鍵入兩個引用:$$
LIST = one two three
all:
for i in $(LIST); do \
echo $$i; \
done
recipe輸出
正常情況下make在執行recipe之前會列印它。
如果recipe前加上了@
符號,就不會列印recipe,當傳給shell處理的時候該符號會被丟棄掉。
給make-n
、--just-print
的flag時候,只會輸出大部分recipe而不執行,帶有@
符號的行也會被列印出來。
flag-s
、--silent
會阻止echoing,就像所有的行都加了@
符號。
recipe執行
執行recipe時,每行recipe都會呼叫一個新的sub-shell來執行,除非定義.ONESHELL
特殊目標。所以本行的shell變數和諸如cd的目錄不會影響後續的recipe。
make的遞迴使用
意思就是在makefile檔案中使用make作為命令。當你現要為子系統分離makefile的時候很有用。
subsystem:
cd subdir && $(MAKE)
相關文章
- 5. SQL 編寫規範SQL
- 使用 Recipe 安裝 SAP Commerce CloudCloud
- Deployer recipe中Laravel配置檔案Laravel
- 從零開始系列-Laravel編寫api服務介面:5.中介軟體驗證JWT登陸LaravelAPIJWT
- 5. 用Rust手把手編寫一個Proxy(代理), 通訊協議建立, 為內網穿透做準備Rust協議內網穿透
- shellcode編寫
- Dockerfile編寫Docker
- 文件編寫
- 編寫DockerFileDocker
- vscode編寫markdownVSCode
- 如何編寫DockerfileDocker
- Layout的編寫
- Java程式編寫Java
- markdown文件編寫
- MySQL原理簡介—5.儲存模型和資料讀寫機制MySql模型
- Sublime 編寫編譯 swift程式碼編譯Swift
- MarkDown文件的編寫
- HTML Email的編寫HTMLAI
- 編寫註冊介面
- 用vim編寫markdown
- 編寫node 外掛
- 編寫表DAO類
- 編寫智慧合約
- egg外掛編寫
- Webpack原理-編寫PluginWebPlugin
- 學習編寫DockerfileDocker
- HTML編寫規範HTML
- eggjs外掛編寫JS
- 編寫jq外掛
- 使用THEOS編寫Tweak
- 如何編寫 iOS PatchiOS
- 日常積累——彙編檔案編寫
- SAP PP C201使用ECR建立Recipe主資料
- 5.檔案操作
- 5. SQL回顧SQL
- java安全編碼指南之:方法編寫指南Java
- 配置檔案的編寫
- LaTeX 編寫中文文件