2016-12-13 41 views
0

我有这样的代码,它的工作原理,但正如你看到我做的替代三次,我想设置值的变量,但没有成功设置里面的先决条件或eval函数变量

$($(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,[email protected]) $(PYTHON_BIN) $< -v ; \ 
env $(PKG-TEST-HELPER-ENV) $(VALGRIND) $(VALGRIND-FLAGS) --log-file=$(subst valgrind_passed,valgrind.log,[email protected]) $(PYTHON_BIN) $< -v \ 
                 || (cat $(subst valgrind_passed,valgrind.log,[email protected]); exit 1) 
@touch [email protected] 

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

我想:

$($(PKG)-py-valgrind-tests-status): LOG-FILE = $(subst valgrind_passed,valgrind.log,[email protected]) 

.SECONDEXPANSION: 
$($(PKG)-py-valgrind-tests-status): LOG-FILE = $$(subst valgrind_passed,valgrind.log,[email protected]) 

和(配方内)

$(eval LOG-FILE = $$(subst valgrind_passed,valgrind.log,[email protected])) 

但对于所有,如果我写

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

日志文件来的了空。

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

回答

0

你确定你在使用GNU make?你使用什么版本(运行make --version)?

使用特定于目标的变量进行第一次尝试没有任何问题。如果这样做不起作用,那么你的makefile文件中有一些错误或不同之处,你没有解释。也许如果你展示了makefile的实际完整部分,并设置并使用了特定于目标的变量,我们可能会看到错误。

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

你的第三次尝试可能会奏效,但又一次没有看到你对eval做了什么,我们不能肯定地说。您不需要在subst函数之前将$加倍;它可以先扩展,它仍然可以工作。

+0

我正在运行3.8.1 – DsCpp

+0

您的意思是3.81。没有3.8.1这样的版本。那么,在我们知道什么是错误之前,你必须提供一个你的实际尝试的例子,因为正如你写的那样(分成两个不同的部分),这似乎是正确的。 – MadScientist