2014-09-01 200 views
0

我有兩個生成文件:的Makefile:添加新規則到規則包括在其他的makefile

  1. 的Makefile

    https://github.com/sprhawk/nrf51822-first-fw/blob/master/Makefile

  2. Makefile.common

    https://github.com/sprhawk/nrf51822-macosx-build-scripts/blob/master/Makefile.common

裏面的Makefile,最後是包含Makefile.common。

我想要的是在調試時添加C_SOURCE_FILES += uart.c。我在Makefile.common看到有一系列debug:目標,所以我只是說debug: C_SOURCE_FILES += uart.c之前包括statment,但抱怨:

製作沒有編譯uart.c到uart.o,但它需要uart.o鏈接。

如何將新規則插入Makefile.common中定義的目標?

+0

'uart.c'在'C_SOURCE_FILES'已列出在'Makefile'第20行(並稱'調試:C_SOURCE_FILES + = uart.c'行只會將其添加到記錄的'debug'目標文件列表中。)完全錯誤是什麼? – 2014-09-01 13:53:16

+0

抱歉,該示例不應在C_SOURCE_FILES中包含uart.c。我只是想出來,見下文。謝謝你。 – sprhawk 2014-09-01 13:55:40

回答

1

哦,我想通了:

ifeq ($(MAKECMDGOALS),debug) # template for conditional rules 
    C_SOURCE_FILES += uart.c 
endif 

https://github.com/sprhawk/nrf51822-first-fw/blob/master/Makefile

+3

這與其他嘗試之間確實沒有區別,它的工作原因是因爲這次在Makefile.common中定義對象變量之前,您正在追加到sources var。如果你想用你最初的嘗試代替這個,你應該會發現它也可以。如果您指定了多個目標,此答案將停止工作。 – user657267 2014-09-01 14:08:14

+0

是的,你是對的,我意識到更多的目標將失敗。我認爲一個更好的解決方法是添加一個特定的VARIABLE,如DEBUG_C_SOURCE_FILES + = uart.c,並將該變量添加到目標debug: – sprhawk 2014-09-04 11:11:19