【问题标题】:Makefile: add new rule into the rules included in other makefileMakefile:将新规则添加到其他makefile中包含的规则中
【发布时间】:2014-09-01 13:43:51
【问题描述】:

我有两个 Makefile:

  1. 生成文件

    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,但它抱怨:

Make 没有将 uart.c 编译为 uart.o,但它需要 uart.o 链接。

如何向 Makefile.common 中定义的目标插入新规则?

【问题讨论】:

  • uart.c 已经列在 C_SOURCE_FILES 中,在第 20 行的 Makefile 中。(添加 debug: C_SOURCE_FILES += uart.c 行只会将其添加到 debug 目标的文件列表中记录。)究竟是什么错误?
  • 抱歉,该示例不应在 C_SOURCE_FILES 中包含 uart.c。我只是想通了,见下文。谢谢你。

标签: c makefile


【解决方案1】:

哦,我想通了:

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

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

【讨论】:

  • 这和其他尝试之间确实没有区别,它起作用的原因是因为这次你在 Makefile.common 中定义对象变量之前附加到源变量。如果您要使用最初的尝试来代替它,您应该会发现它也有效。如果您指定多个目标,此答案将停止工作。
  • 是的,你是对的,我意识到更多的目标将无法工作。我认为更好的解决方法是添加一个特定的变量,如 DEBUG_C_SOURCE_FILES += uart.c,并将变量添加到目标调试:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-14
  • 1970-01-01
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多