2016-01-13 68 views
1

我有一個具有以下模式規則以創建一個隱含的規則生成文件:的Makefile模式規則被發現,但配方不運行

%.cpp: 
    $(warning foo) 

當我檢查的make -d輸出我看到這種隱含規則找到並匹配文件。我驗證當我刪除模式規則時,make -d的輸出不再顯示匹配。但是,即使找到隱式規則,警告也不會顯示出來。 雖然隱式規則匹配,但配方未運行。

什麼給?

+0

這裏你的實際目標是什麼? –

+0

我的目標是指定一個配方來運行所有.cpp文件作爲先決條件。 – aardvarkk

+0

即使對於存在的'.cpp'文件,你也想運行規則?然後你需要說服它做到這一點,即使它們是最新的。看[強制目標](http://www.gnu.org/software/make/manual/make.html#Force-Targets)。 –

回答

1

該配方告訴如何創建 a %.cpp文件(並沒有給它任何先決條件)。

你什麼時候期待它被運行?

它不會爲任何現有的*.cpp文件運行,因爲缺少先決條件意味着認爲文件是最新的。

嘗試運行make totally-doesnt-exist.cpp,您應該看到警告。

+0

是的,你很好地闡明瞭我認爲我會犯錯的地方。我認爲,我已經將依賴觀念向後倒了一些。我試圖指定給定某個目標的對象,但是除非先決條件較新(其中沒有!),否則它不會被執行。我應該關注輸出的.o文件,而不是源代碼.cpp文件。 – aardvarkk

+1

對,使* *輸出*目標不是輸入文件。輸入用於在不同的匹配規則之間進行選擇並創建規則鏈等。 –