[英]What the role of a target in a Makefile?
我的印象是冒號的左側:
代表target
,即可執行文件,而右側代表“依賴項”,即產生所述目標所需的文件。
hello : hello.c
gcc hello.c -Wall -o hello
因此,我認為目標“ hello”是最終可執行文件的名稱。
executableHelloWorldFile : hello.c
gcc hello.c -Wall -o hello
但是,當我將“ hello”更改為“ executableHelloWorldFile”時,輸出中沒有任何變化。
我知道如何創建目標, 但是在這里我希望了解, target
在什么方面幫助Makefile?
首先, 假定Target是一個文件 ,如果該文件不存在或者其時間戳晚於其任何依賴關系,則將重新生成該文件 。 如果將目標名稱從實際文件名更改為隨機名稱,則將始終重制目標,因為您正在欺騙make的那個任意文件不存在,並且在make運行指定命令時不會創建該文件。
編輯:您的編譯器不知道make會調用它,它完全執行您給它的指令(就像每個計算機程序都應該做的一樣)。 如果您說“ -o hello”,它將二進制文件寫入文件“ hello”,而不管您想出的虛假目標名稱如何。
是的,在您的示例中,目標“ hello”碰巧導致生成.exe“ hello”。
但是不可以,您可以使用目標觸發任何動作(或動作組合)。
例如,“ make clean”,“ make build”,“ make install”和“ make all”是常見命令。 它們觸發makefile進行以下操作:1)清理所有已構建的“垃圾”,2)重新編譯項目,3)安裝項目或4)做所有事情
為了回答您的問題,“目標”只是告訴makefile“執行某事”的一種方法。
在您的示例中,目標將調用“ gcc”。 但是,只有在源文件“ hello.c”已過期時,它才會調用它。
一個makefile通常包含許多目標,規則和定義。
一個組件通常由多個子項目組成,每個子項目都有自己的makefile。
'希望有幫助.. PSM
您需要在規則中使用適當的變量: $@
是目標$^
是依賴項。 在您的情況下,應為:
executableHelloWorldFile : hello.c
gcc $^ -Wall -o $@
或者,當您只需要引用第一個依賴項時,請使用$<
:
executableHelloWorldFile : hello.c
gcc $< -Wall -o $@
make執行您給它的命令。 如果該命令未創建目標,則是編寫錯誤命令的錯誤。 顯着的區別是,如果您正確地指定了目標,則可以連續運行兩次make,它將第二次知道目標是最新的並且不需要重建。 如果命令實際上未創建目標,則如果連續兩次運行make,第二個命令將不必要地重新運行該命令。
某些目標(如all
和clean
)通常包含在Makefile中,而實際上並不是現有文件。 它們代表了用戶可以使用諸如make clean
之類的命令請求的更大操作,在每次操作中都必須運行命令。
make target
基本上是您要重建的文件。
Make無法確定要構建的內容,因此您必須隱式或顯式地告訴它應構建的內容。 通常,文件中的第一個目標是諸如“ all”之類的名稱,如果在沒有任何顯式目標的情況下運行“ make”,它將建立makefile中列出的第一個目標。 但是,某些makefile沒有指定任何目標。 那么您必須在命令行上指定一個。 或者,如果您不想構建默認目標,則必須指定要構建的目標。
makefile
通常將包含用於編寫程序,安裝程序,事后清理等的代碼。
因此目標詞可以是各種關鍵字,例如all, install, clean, etc
。
這是說些什么的一種方式。 讓所有人都隱瞞一切
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.