2014-09-01 113 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