在生成文件沒有反斜槓,是什麼差食譜反斜線和多線食譜中生成文件
targets : prerequisites
recipe command \
recipe command \
...
和
targets : prerequisites
recipe command
recipe-command
...
在生成文件沒有反斜槓,是什麼差食譜反斜線和多線食譜中生成文件
targets : prerequisites
recipe command \
recipe command \
...
和
targets : prerequisites
recipe command
recipe-command
...
從GNU進行手動的部分5.3 Recipe Execution:
當是時候來執行食譜更新目標,他們通過調用一個新的子殼爲配方的每一行執行,除非該.ONESHELL特殊目標有效(請參閱使用一個shell)(實際上,make可能會採用不影響結果的快捷方式。)
請注意:這意味着要設置shell變量並調用shell命令,例如cd設置每個進程的本地上下文不會影響配方中的以下行。如果要使用cd來影響下一個語句,請將兩條語句都在一個配方行中。然後make將調用一個shell來運行整個行,並且shell將按順序執行這些語句。例如:
foo : bar/lose cd $(@D) && gobble $(@F) > ../[email protected]
這裏我們使用殼牌和運營商(& &),這樣,如果cd命令失敗,腳本將不嘗試在錯誤的目錄調用狼吞虎嚥命令失敗,這可能會導致問題(在這種情況下,它肯定會導致../foo被截斷,至少)。
使用反斜槓將命令分割爲多行。正如手冊的5.1 Recipe Syntax部分所詳細解釋的那樣。
make解釋食譜的幾種方法之一是在換行符之前檢查反斜線。和通常的makefile語法一樣,通過在每個換行符之前放置一個反斜槓,可以將單個邏輯配方行分割成makefile中的多條物理行。像這樣的一系列行被認爲是單一的配方行,並且會調用一個shell實例來運行它。
之間的差值。當多條線路被連接通過用反斜槓轉義換行符,它們將全部運行在同一個shell中。如果使用shell變量,這可能很重要。當每個命令出現在它自己的行上時,它們將分別運行在一個新的shell中。
要在一個單殼中,整行需要被'('和')'包圍 – user3629249 2014-12-19 11:33:32
@ user3629249不,它沒有。這樣做會啓動一個(無意義的)子shell。 – 2014-12-19 12:32:55