2013-06-01 199 views
1

我目前對makefile目標的工作方式感到困惑。我有一個目前的瞭解,我不知道這是否正確,因爲我一直在閱讀的教程並不是很清楚。這是我目前的理解makefile依賴關係如何工作?

  1. 當你在終端運行「化妝」,makefile文件的工具找到的第一個目標在生成文件,並嘗試運行它,但這樣做之前,它看起來在所有的依賴關係文件
  2. (這是我開始感到困惑的地方):如果依賴項是生成文件中的目標,但不存在作爲生成文件目錄中的文件,則只需運行目標。如果依賴項是文件名,但不是生成文件中的目標,則實用程序會檢查文件的存在,如果該文件不存在,該實用程序就會對您發出警告。如果依賴項是目錄和目標中存在的文件,那麼只要文件目標所依賴的任何文件比關聯文件更新,就會運行目標。

我必須下來嗎?它比我做出來更簡單嗎?

+0

這聽起來是正確的。 –

回答

3

你說的沒錯,或多或少,但它可以說得更清楚一點。關於如何選擇初始目標,你是對的,除非用戶在make命令行上指定了特定的目標,然後使用該目標而不是第一個目標。

然後使基本實現了每個目標的遞歸算法,即是這樣的:

  1. 發現一個規律,以構建目標。如果沒有建立目標的規則,則make失敗。
  2. 對於目標的每個先決條件,請使用該先決條件作爲目標運行此算法。
  3. 如果目標不存在,或者任何先決條件的修改時間比目標的修改時間更新,則運行與目標關聯的配方。如果配方失敗,通常會失敗。

就是這樣!當然,這隱藏了許多複雜的問題:特別是在目標沒有隱含規則的情況下,項目#1(找到規則)可能會很複雜。另外,可以修改諸如規則失敗時要執行的操作等行爲。

但這是基本算法!