2017-07-27 43 views
0

在我包含的Makefiles中的一個是%.kt_rfgw規則。當我第一次編譯時,有No rule to make target,它失敗了。但是當我做第二次沒有任何改變時,它會發現除了web服務器之外的規則不需要重建。沒有規則,使目標作品第二次後


生成文件:

TARGET:=kt_rfgw 

all: webserver gateway 

webserver: 
    ...doing stuff... 

gateway: $(CONTIKI_PROJECT).$(TARGET) 
    ...doing stuff... 

在Makefile.Include:

$(warning Rule: "%.kt_rfgw:" found)%.$(TARGET): %.co $(PROJECT_OBJECTFILES) $(PROJECT_LIBRARIES) contiki-$(TARGET).a 
...doing stuff... 




差錯消息時就使第一次:

/c/...path.../Makefile.include:316: Rule: "%.kt_rfgw:" found 
... 
make[1]: *** No rule to make target `regelfern.kt_rfgw', needed by `gateway'. Stop. 

無消息時不要讓第一次:

/c/...path.../Makefile.include:316: Rule: "%.kt_rfgw:" found 
... 
...compiling... 
+0

請包括'%.kt_rfgw'的規則。理想地去掉所有不必要的東西並創建一個[最小,完整且可驗證的示例](https://stackoverflow.com/help/mcve)。 – l0b0

+0

'$(TARGET)'是'%.kt_rfgw',對不起 – Chris

+0

我認爲問題是,目標'gateway'需要一個由目標'webserver'創建的文件。但只有在剛剛開始檢查目標「網關」的規則時。在開始第二個目標之前是否可以再次檢查? – Chris

回答

0

你可能忘了告訴做出了webserver規則建立$(CONTIKI_PROJECT).$(TARGET)。所以,在第一次調用時,當make解析Makefile時,它發現它需要它來構建目標gateway,它抱怨說它不知道如何構建這個先決條件。然後,它會盡其所能,即執行webserver規則,該規則會創建$(CONTIKI_PROJECT).$(TARGET)(但時間太晚)。在第二次調用它仍然不知道如何構建$(CONTIKI_PROJECT).$(TARGET),但因爲它已經在那裏一切都很好。

作爲一個快速和骯髒的黑客嘗試,也許,添加:

$(CONTIKI_PROJECT).$(TARGET): webserver 

告訴做出$(CONTIKI_PROJECT).$(TARGET)可以通過執行webserver規則之上。