談到GNU make時,PHONY目標all:
和default:
之間有什麼區別。Makefile:所有與默認目標
CC=g++
default: hello
hello: hello.cpp
$(CC) -o hello hello.cpp
和
CC=g++
all: hello
hello: hello.cpp
$(CC) -o hello hello.cpp
他們都做同樣的工作。
談到GNU make時,PHONY目標all:
和default:
之間有什麼區別。Makefile:所有與默認目標
CC=g++
default: hello
hello: hello.cpp
$(CC) -o hello hello.cpp
和
CC=g++
all: hello
hello: hello.cpp
$(CC) -o hello hello.cpp
他們都做同樣的工作。
,如果你喜歡,你可以打電話給他們shirley
;你提到的標籤都沒有任何特殊的語義。如果您沒有將目標指定爲命令行參數,則默認行爲make
將運行Makefile
中的第一個目標。如果您想要覆蓋此行爲,則有.DEFAULT:
特殊目標。
有一個約定有一個名爲all
的目標,它構建了所有的東西,但這只是人類約定,並非特殊情況或就Make而言。
同樣,有一個(弱)約定稱爲默認目標default
,但類似地,這只是一個人的標籤(與all
約定有些重疊並可能有衝突)。
所以下面的Makefile做同樣的事情:
.PHONY: shirley all default
default: hello
all: hello
shirley: hello
hello: hello.cpp
# (Make already knows how to build an executable out of a .cpp file)
可以省略任何或所有上述的假目標,唯一的區別是,人類將無法說make shirley
時他們(有效)的意思是make hello
。底線:構建您的Makefile,以便make
能夠完成合理的最終用戶所期望的操作,而不會讀取太多的文件或檢查Makefile
文件或檢查文件或檢查Makefile
文件或檢查Makefile
。通常情況下,這將是make all
(爲了滿足人們的習慣,即使它不是默認設置,你也應該有一個這個名字的目標),但這顯然取決於你的項目和用戶的期望。
別叫我雪莉。
一個拼寫爲「all」,另一個拼寫爲「default」。他們之間沒有其他區別。也許如果你解釋了爲什麼你問我們可以提供更多幫助。
請注意,在您的示例中,上述兩個目標都不是真正的假。你必須把他們定義爲這樣:
.PHONY: all
等
唯一的區別是,all
在GNU建議進行手動,成爲第一個(默認)目標,並default
沒有這樣的特別推薦。
指定'.DEFAULT'特殊目標是**不是**重寫默認目標的方法。默認目標是makefile中不是以'。'開頭的第一條規則。 - 除非通過指定特殊變量'.DEFAULT_GOAL'來覆蓋。爲了通知讀者很長的makefile文件,最好在makefile文件的早期指定.DEFAULT_GOAL或者編寫一個規則(通常是一個虛擬的規則,比如'default:all',沒有配方)。 – 2017-02-28 12:51:39
@DavidHammen我同意你的最終結論。但是,我認爲'.DEFAULT_GOAL'黑客主要是應該避免的深奧後門,並且[手冊](https://www.gnu.org/software/make/manual/html_node/Special-Variables。 HTML)如何使用它的例子肯定會強化這種印象。 – tripleee 2017-02-28 13:20:45