回答
Makefile文件是這樣的:
all: mybinary
mybinary: files.o it.o depends.o on.o
[tab]$(CC) $(CFLAGS) files.o it.o depends.o on.o -o mybinary
files.o: files.c files.h
[tab]$(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o [email protected]
...
這意味着,當你鍵入make all
(簡寫只是鍵入make
),這將確保該mybinary目標或文件是最新的。要做到這一點,需要確保mybinary比所有files.o it.o depends.o和on.o更新。如果不是,那麼它使用下一行指定的shell命令來構建mybinary。但在這之前,它首先確保files.o等等是最新的。這意味着它們必須比files.c和files.h更新。如果沒有,那麼它使用下一行指定構建files.o的shell命令。一旦所有的* .o文件都是最新的,它可以構建mybinary。一旦建立了mybinary,所有的目標都會得到滿足。
目標通常只是文件。塊的格式是:
target: list of dependency files
[tab]shell commands to build target if it's older than any of its dependencies
[tab]more shell commands
[tab]still more
目標也可以使用通配符指定的,比如%.c
意味着你會打電話的外殼是什麼*.c
。
某些目標是「假目標」目標,意味着它們不對應於任何真實文件。 「全部」目標就是這種類型。 「乾淨」目標也是如此(make clean
)。等等。您並不需要或不想構建一個名爲「all」或「clean」的文件。有很多方法可以指定一個目標是假的。
出現在Makefile中的第一個目標是如果您只需鍵入make
就會被調用的目標。一個慣例是將這個目標命名爲「全部」。那麼make
將與make all
相同。
A makefile
通常會包含代碼以使您的程序,安裝程序,清理以及其他事情。
這樣的話target
可能是不同的關鍵字,如all
,install
,clean
等
這是說讓東西的一種方式。 make all
意味着盡一切力量
嚴格地說,當然,命令'make all''只意味着(狀態)「做必要的工作以確保'全部'是最新的」。通常情況下,人們編寫makefile以便完成大部分所需(但不會自動執行安裝)。但那只是一個慣例。 – 2010-02-16 04:41:08
'make target'基本上是一個你想要重建的文件。
Make不能推定你想要構建的東西,所以你必須隱含或明確地告訴它應該建立什麼。通常,文件中的第一個目標是諸如'all'之類的名稱,如果您運行沒有任何明確目標的'make',它將構建makefile中列出的第一個目標。但是,一些makefile並未指定任何目標;那麼你必須在命令行中指定一個。或者,如果您不想構建默認目標,則必須指定您要構建的目標。
根據GNU make,目標也可以是'假'。也就是說,它是一個不存在的名稱,規則不創建它,但它(假目標)取決於其他許多與它們有關聯的規則的文件。事實上,「全部」目標通常是虛假目標 - 在大多數目錄中沒有一個名爲「全部」的文件。
make
是一種常見的開發工具,它檢查源代碼文件,並從它們產生的目標代碼之間的文件的日期,並編譯所述一個其中源是較新的。它通過使用名爲makefile的文件來完成此操作,該文件列出了需要比較的文件。
的標準語法是make /f makefile myprog.exe
,說使用的makefile文件列表建立MYPROG.EXE。 makefile默認爲makefile.mak
,所以如果使用該名稱,則不必在命令行中指定它。
myprog.exe
這裏稱爲目標。一個訣竅是,你可以在makefile中爲不存在文件的構建指令列表。如果你然後說建立這個目標,它將運行這些命令。通常,您會看到類似make clean
的文件,其中臨時文件已被刪除。
- 1. 無法制定目標。這是什麼?
- 2. 什麼是Makefile目標`.c.o`?
- 3. EnsureNuGetPackageBuildImports目標是什麼?
- 4. ObjectMapper的目標是什麼?
- 5. 制定目標,取消制定目標?
- 6. 什麼是用戶定製
- 7. iPhone開發的目標是什麼?爲什麼我需要不同的目標?
- 8. 目標c中「C#屬性」的等價控制是什麼?
- 9. 什麼@目標C
- 10. 什麼是緩存標籤目錄?
- 11. 什麼是目標C方法(^)符號
- 12. 什麼是標籤欄項目的類
- 13. 目標C中的^是什麼意思?
- 14. 聲納,什麼是Java目標
- 15. 什麼是目標:x86_64-redhat-linux?
- 16. ASP.NET Web API:它的目標是什麼?
- 17. Xcode中的目標究竟是什麼?
- 18. iPhone OS的目標是什麼?
- 19. java.nio.file.CopyOption接口的目標是什麼?
- 20. 目標C中什麼是非空?
- 21. 目標C,這是什麼警告?
- 22. Android版本的目標是什麼?
- 23. Xcode中的目標是什麼?
- 24. XGBoost:什麼是參數「目標」設置?
- 25. 什麼是xcode目標名稱?
- 26. 這個全球目標是什麼?
- 27. 什麼是目標C的「stringWithContentsOfURL」替代?
- 28. gnu make中的「.MAKE」目標是什麼?
- 29. 目標C的Nib文件是什麼?
- 30. 部署目標是什麼意思?
「*它需要確保mybinary比所有files.o it.o depends.o和on.o *更新」...;這是如何完成的?這是通過比較上次修改時間來完成的嗎? – Pacerier 2016-08-08 09:44:06
是的,通過比較文件上次修改時間。實際上,這導致創建UNIX實用程序'touch',其目的是更新文件的修改日期,以觸發構建。 – 2016-08-08 21:10:40