Make:根据要构建的目标设置变量

时间:2016-12-05 12:50:44

标签: makefile build compilation gnu-make

在(GNU)make中,我希望在特定目标的构建链开始时为变量分配值。对于目标a.sob.so,每个目标取决于b.o,我可以像这样手动执行此操作:

# Rules
all: a.so b.so
a.so: b.o
    @echo Current .so is $(current)
    touch $@
b.so: b.o
    @echo Current .so is $(current)
    touch $@
b.o:
    @echo Current .so is $(current)
    touch $@

# Set the "current" variable based on which .so is being build
a.so: current = a.so
b.so: current = b.so

此处,current在执行a.soa.so的规则时的值为b.o,而current的值为b.so仅在执行b.so规则时。这就是我要的。我对此的心理模型是,一旦make发现a.so: current = a.so应该构建(即,在a.so或{{的规则之前),就会触发行a.so。 1}}运行)。如果我错了,请纠正我。

在我的实际案例中,我有更多b.so个文件,所以我想用这样的东西替换最后两行;

.so

或者这个;

%.so: current = $@

但是,这两者都会导致相同的错误行为,即使sofiles = a b $(addsuffix .so, $(sofiles)): current = $@ 目标即将构建,current变量也会重新设置。为什么b.o目标会触发这些行?如何为每个b.o手动编写a.so: current = a.so时实现相同的行为,但没有为每个.so实际连接此内容?

注意:我知道示例代码中显示的用例很奇怪,并且可以在没有这个笨拙的.so变量的情况下实现所追求的效果。然而,我对任何解决问题而不使用此变量的解决方案都不感兴趣。

0 个答案:

没有答案