在先决条件或eval函数中设置变量

时间:2016-12-13 07:20:09

标签: gnu-make

我有这个代码,它有效,但正如你所看到我做了三次替换,我想设置一个变量值,但没有成功

$($(PKG)-py-valgrind-tests-status): $($(PKG)-swig-dlib)
$($(PKG)-py-valgrind-tests-status): $(OBJ_OUTPUT_DIR)%.valgrind_passed: %.py
@echo env $(PKG-TEST-HELPER-ENV) valgrind $(VALGRIND-FLAGS) --log-file=$(subst valgrind_passed,valgrind.log,$@)  $(PYTHON_BIN) $< -v ; \
env $(PKG-TEST-HELPER-ENV) $(VALGRIND) $(VALGRIND-FLAGS) --log-file=$(subst valgrind_passed,valgrind.log,$@)  $(PYTHON_BIN) $< -v \
                                                        || (cat $(subst valgrind_passed,valgrind.log,$@); exit 1)
@touch $@

有问题的行$(subst valgrind_passed,valgrind.log,$ @)

我试过了:

$($(PKG)-py-valgrind-tests-status): LOG-FILE = $(subst valgrind_passed,valgrind.log,$@)

.SECONDEXPANSION:
$($(PKG)-py-valgrind-tests-status): LOG-FILE = $$(subst valgrind_passed,valgrind.log,$@)

和(在食谱内)

$(eval LOG-FILE = $$(subst valgrind_passed,valgrind.log,$@)) 

但是对于所有人来说,如果我写

--log-file=$(LOG-FILE)

日志文件空了。

我对如何前进没有更多的想法, 感谢帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

你确定你正在使用GNU make吗?您使用的是哪个版本(运行make --version)?

使用特定于目标的变量,您的第一次尝试没有任何问题。如果这不起作用,那么您的makefile就会出现错误或不同之处,但您尚未解释。也许如果您展示了makefile的实际完整部分,并且设置并使用了特定于目标的变量,我们可能会看到错误。

您的第二次尝试无法正常工作,因为辅助扩展只应用先决条件,而不是特定于目标的变量(但如上所述,无论如何都不需要)。

您的第三次尝试可能会再次发挥作用,但如果没有确切了解您对eval所做的事情,我们无法确定。您不需要在$函数之前加倍subst;它可以先扩展,它仍然可以工作。