Мне нужно определить цель, которая содержит номер версии, который, в свою очередь, извлекается из некоторого файла (предпосылки этой цели), полученного из git.
Сначала я попытался установить переменную с eval
и использовать это в названии, например так.
version_file:
@checkout
version: version_file
@eval version := get version from version_file
file_$(version):
@echo file_$(version)
final_target: file_$(version)
@echo $@
Это не может работать: make
читает make-файл при первом проходе и не находит переменную dynamic_prerequisite
, поэтому созданная цель просто называется file_
.
Но когда я пытаюсь создать правило динамически, после того, как переменная была установлена, как это
...
define rule_file_version
file_$(version):
@echo version: $@
endef
version: version_file
@eval version := get version from version_file
$(eval $(rule_file_version))
... это выдает мне сообщение об ошибке:
makefile: 12: *** предварительные условия не могут быть определены в рецептах.
Конечно, я не могу переместить eval
для цели за пределы рецепта, так как тогда я сталкиваюсь с той же проблемой, что и раньше.
Есть ли способ добиться того, чего я хочу, с gnu make
?