C Makefile:将新规则添加到其他Makefile中包含的规则中

C Makefile:将新规则添加到其他Makefile中包含的规则中,c,makefile,C,Makefile,我有两个makefile: 生成文件 Makefile.common 在Makefile中,它的末尾包括Makefile.common 我想要的是在进行调试时添加C\u源文件+=uart.C。我在Makefile.common中看到了一系列debug:target,所以我刚刚在include station之前添加了debug:C\u SOURCE\u FILES+=uart.C,但它抱怨: Make没有将uart.c编译为uart.o,但它需要uart.o链接 如何向Makefile.co

我有两个makefile:

  • 生成文件

  • Makefile.common

  • 在Makefile中,它的末尾包括Makefile.common

    我想要的是在进行调试时添加
    C\u源文件+=uart.C
    。我在
    Makefile.common
    中看到了一系列
    debug:
    target,所以我刚刚在include station之前添加了
    debug:C\u SOURCE\u FILES+=uart.C
    ,但它抱怨:

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

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

    哦,我想出来了:

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

    uart.c
    已列在第20行的
    c\u源文件中。(添加
    debug:C_SOURCE_FILES+=uart.C
    行只会将其添加到记录的
    debug
    目标的文件列表中。)错误到底是什么?很抱歉,该示例不应在C_SOURCE_文件中包含uart.C。我只是想弄明白,见下文。谢谢你。这与另一次尝试没有什么区别,之所以有效,是因为这次你是在Makefile.common中定义对象变量之前附加到源变量。如果你用你最初的尝试来代替这个,你会发现它也很有效。如果您指定多个目标,此答案将停止工作。是的,您是对的,我知道更多目标将无法工作。我认为更好的解决方法是添加一个特定变量,如DEBUG_C_SOURCE_FILES+=uart.C,并将该变量添加到目标DEBUG: