我有这个代码,它有效,但正如你所看到我做了三次替换,我想设置一个变量值,但没有成功
$($(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)
日志文件空了。
我对如何前进没有更多的想法, 感谢帮助,谢谢!
答案 0 :(得分:0)
你确定你正在使用GNU make吗?您使用的是哪个版本(运行make --version
)?
使用特定于目标的变量,您的第一次尝试没有任何问题。如果这不起作用,那么您的makefile就会出现错误或不同之处,但您尚未解释。也许如果您展示了makefile的实际完整部分,并且设置并使用了特定于目标的变量,我们可能会看到错误。
您的第二次尝试无法正常工作,因为辅助扩展只应用先决条件,而不是特定于目标的变量(但如上所述,无论如何都不需要)。
您的第三次尝试可能会再次发挥作用,但如果没有确切了解您对eval
所做的事情,我们无法确定。您不需要在$
函数之前加倍subst
;它可以先扩展,它仍然可以工作。