我有一個具有以下模式規則以創建一個隱含的規則生成文件:的Makefile模式規則被發現,但配方不運行
%.cpp:
$(warning foo)
當我檢查的make -d
輸出我看到這種隱含規則找到並匹配文件。我驗證當我刪除模式規則時,make -d
的輸出不再顯示匹配。但是,即使找到隱式規則,警告也不會顯示出來。 雖然隱式規則匹配,但配方未運行。
什麼給?
我有一個具有以下模式規則以創建一個隱含的規則生成文件:的Makefile模式規則被發現,但配方不運行
%.cpp:
$(warning foo)
當我檢查的make -d
輸出我看到這種隱含規則找到並匹配文件。我驗證當我刪除模式規則時,make -d
的輸出不再顯示匹配。但是,即使找到隱式規則,警告也不會顯示出來。 雖然隱式規則匹配,但配方未運行。
什麼給?
該配方告訴如何創建 a %.cpp
文件(並沒有給它任何先決條件)。
你什麼時候期待它被運行?
它不會爲任何現有的*.cpp
文件運行,因爲缺少先決條件意味着認爲文件是最新的。
嘗試運行make totally-doesnt-exist.cpp
,您應該看到警告。
是的,你很好地闡明瞭我認爲我會犯錯的地方。我認爲,我已經將依賴觀念向後倒了一些。我試圖指定給定某個目標的對象,但是除非先決條件較新(其中沒有!),否則它不會被執行。我應該關注輸出的.o文件,而不是源代碼.cpp文件。 – aardvarkk
對,使* *輸出*目標不是輸入文件。輸入用於在不同的匹配規則之間進行選擇並創建規則鏈等。 –
這裏你的實際目標是什麼? –
我的目標是指定一個配方來運行所有.cpp文件作爲先決條件。 – aardvarkk
即使對於存在的'.cpp'文件,你也想運行規則?然後你需要說服它做到這一點,即使它們是最新的。看[強制目標](http://www.gnu.org/software/make/manual/make.html#Force-Targets)。 –