簡體   English   中英

什么是“制造目標”?

[英]What is a 'make target'?

為什么我需要在構建源代碼之前創建一個make target

更具體地說, make target到底是什么?

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 $@

...

這意味着,當您鍵入make all (簡寫只是鍵入make )時,它將確保mybinary目標或文件是最新的。 要做到這一點,它需要確保mybinary比所有files.o it.o depends.o和on.o更新。 如果沒有,那么它使用下一行指定的shell命令來構建mybinary。 但在此之前,它首先確保files.o等是最新的。 這意味着它們必須比files.c和files.h更新。 如果沒有,那么它使用下一行指定的shell命令來構建files.o。 一旦所有* .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表示在shell中調用*.c

有些目標是“虛假”目標,這意味着它們與任何真實文件都不對應。 “所有”目標就是這種。 “清潔”目標也是如此( make clean )。 等等。 您並不真正需要或想要構建名為“all”或“c​​lean”的文件。 有多種方法可以指定目標是虛假的。

出現在Makefile中的第一個目標是只要輸入make就會被調用的目標。 一種慣例是將此目標命名為“全部”。 那么make就像make all

'make target'基本上是您想要重建的文件。

Make無法理解您想要構建的內容,因此您必須隱式或明確地告訴它應該構建什么。 通常,文件中的第一個目標是諸如“all”之類的名稱,如果運行'make'而沒有任何顯式目標,它將構建makefile中列出的第一個目標。 但是,一些makefile沒有指定任何目標; 那么你必須在命令行中指定一個。 或者,如果您不希望構建默認目標,則必須指定要構建的目標。

就GNU make而言,目標也可以是“假的”。 也就是說,它是一個不存在的名稱,並且規則不會創建它,但它(虛假目標)依賴於許多其他具有與之關聯的規則的文件。 實際上,'all'目標通常是假目標 - 在大多數目錄中沒有名為'all'的文件。

makefile通常包含用於制作程序,安裝程序,后續清理以及其他內容的代碼。

所以單詞target可以是各種關鍵字,例如allinstallclean等。

這是一種說出某種東西的方式 make all意味着做一切

make是一個通用的開發工具,它檢查源代碼文件和從它們生成的目標代碼之間的文件日期,並編譯源更新的文件。 它通過使用一個名為makefile的文件來完成此操作,該文件列出了需要比較的文件。

標准語法是make /f makefile myprog.exe

這表示使用makefile中的文件列表構建myprog.exe。 makefile默認為makefile.mak因此如果使用該名稱,則不必在命令行中指定它。

這里的myprog.exe被稱為目標。 一個技巧是你可以在makefile中輸入一個不存在的文件的構建指令列表。 如果您說要構建該目標,它將運行這些命令。 通常,你會看到像make clean這樣的東西,它刪除了臨時文件。

在現實生活中,當您想要實現某事時,您通常將其稱為目標或目標。 要達到該目標,通常您需要滿足一些先決條件。

在計算機領域,目標具有類似的含義。 它不一定限於構建軟件。 但是在構建軟件時經常會看到它。

一個軟件通常由很多組件組成。 並且這些組件通常具有相互依賴關系。 假設完全構建一個軟件是你的最終目標。 為了實現這一點,您需要根據它們的依賴關系構建組件。 您可以將組件組織成一個層次結構,就像一棵樹一樣。 而每個節點都是以根為最終目標的中間目標,通常命名為all 您可以為任何目標節點(中間節點或根節點)調用make 然后需要完成它的所有子目標才能使目標節點完成。

對於每個目標,您需要指定完成該目標要采取的操作。 這些動作稱為命令或規則。

來自這里的一些引用:

目標以特定順序將任務組合在一起,並允許將構建過程分解為更小的單元。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM