簡體   English   中英

目標在Makefile中的作用是什么?

[英]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”,而不管您想出的虛假目標名稱如何。

  1. 是的,在您的示例中,目標“ hello”碰巧導致生成.exe“ hello”。

  2. 但是不可以,您可以使用目標觸發任何動作(或動作組合)。

    例如,“ make clean”,“ make build”,“ make install”和“ make all”是常見命令。 它們觸發makefile進行以下操作:1)清理所有已構建的“垃圾”,2)重新編譯項目,3)安裝項目或4)做所有事情

  3. 為了回答您的問題,“目標”只是告訴makefile“執行某事”的一種方法。

    在您的示例中,目標將調用“ gcc”。 但是,只有在源文件“ hello.c”已過期時,它才會調用它。

  4. 一個makefile通常包含許多目標,規則和定義。

    一個組件通常由多個子項目組成,每個子項目都有自己的makefile。

'希望有幫助.. PSM

您需要在規則中使用適當的變量: $@是目標$^是依賴項。 在您的情況下,應為:

executableHelloWorldFile : hello.c
    gcc $^ -Wall -o $@

或者,當您只需要引用第一個依賴項時,請使用$<

executableHelloWorldFile : hello.c
    gcc $< -Wall -o $@

make執行您給它的命令。 如果該命令未創建目標,則是編寫錯誤命令的錯誤。 顯着的區別是,如果您正確地指定了目標,則可以連續運行兩次make,它將第二次知道目標是最新的並且不需要重建。 如果命令實際上未創建目標,則如果連續兩次運行make,第二個命令將不必要地重新運行該命令。

某些目標(如allclean )通常包含在Makefile中,而實際上並不是現有文件。 它們代表了用戶可以使用諸如make clean之類的命令請求的更大操作,在每次操作中都必須運行命令。

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

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

makefile通常將包含用於編寫程序,安裝程序,事后清理等的代碼。

因此目標詞可以是各種關鍵字,例如all, install, clean, etc

這是說些什么的一種方式。 讓所有人都隱瞞一切

暫無
暫無

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

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