2016-12-13 42 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