【问题标题】:Is there a way to reference a target specific variable in a Makefile's Rule?有没有办法在 Makefile 的规则中引用目标特定变量?
【发布时间】:2013-02-07 16:01:57
【问题描述】:
1 target foo : src = foo.c
2 target foo : obj = foo.o
3 target bar : src = bar.c
4 target bar : obj = bar.o

5 foo bar: obj   # problem - not recognizing obj!
6    @echo link ${bin}     
7    @gcc command to link ${obj}

8 foo.o bar.o
9    @echo compile ${src}
10   @gcc command to compile ${src}

因此,目标特定变量非常适合第 6、7、9 和 10 行中使用的目标配方。但是,有没有一种方法可以像我一样在目标规则本身中引用目标特定变量“obj”在第 5 行?我想有,但我需要一些巫毒符号来引用它。不敢相信我在任何地方都找不到这个答案。提前致谢!

【问题讨论】:

    标签: makefile target


    【解决方案1】:

    使用secondary expansion:

    .SECONDEXPANSION:
    
    foo bar: $$(obj)
        ...
    

    【讨论】:

    • 哦哇..这个二次扩展对我来说是新的。完全启用我想要做的事情。谢谢。
    【解决方案2】:

    我认为您需要先决条件,而不是针对特定变量:

    foo : foo.o
    bar : bar.o
    
    foo bar :
        gcc -o $@ $^ ${LDFLAGS } ${LDLIBS}
    
    # use the default rule for .c to .o
    

    请注意,$^ 会扩展为所有先决条件的列表。

    【讨论】:

    • 4 天前我还是个文盲。这并不是我在这里所需要的,但仍然扩展了我的知识。谢谢。
    • @JeffGoguen 目标特定变量的值仅在规则中可用。先决条件也是如此。如果您想将不同类型的先决条件分成组,您可以使用filter,例如$(filter %.o,$^) 产生所有 .o 先决条件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 2013-09-20
    • 1970-01-01
    相关资源
    最近更新 更多