2016-12-13 3 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] 

проблемная линия $ (Подст 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

Смежные вопросы