2
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 行中使用的目标配方。但是,有没有一种方法可以像在第 5 行中那样在目标规则本身中引用目标特定变量“obj” ? 我想有,但我需要一些巫毒符号来引用它。不敢相信我在任何地方都找不到这个答案。提前致谢!

4

2 回答 2

4

使用二次扩展

.SECONDEXPANSION:

foo bar: $$(obj)
    ...
于 2013-02-07T16:07:40.800 回答
2

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

foo : foo.o
bar : bar.o

foo bar :
    gcc -o $@ $^ ${LDFLAGS } ${LDLIBS}

# use the default rule for .c to .o

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

于 2013-02-07T16:07:00.920 回答