Сейчас я изучаю, как использовать make-файлы, и у меня возникают проблемы с переменными внутри правил. Моя цель - проанализировать файл, содержащий имена других файлов, сохранить его в переменной и использовать переменную в качестве «целевого шаблона» для запуска правила для каждого файла. Вот простой пример моей проблемы (я пишу имена файлов для упрощения).Как использовать переменную makefile за пределами правила
Когда я запускаю это:
variable = file1.txt file2.txt file3.txt
run : $(variable)
$(variable): %.txt:
echo File is [email protected]
Я получаю следующее, что и я хочу:
$ make run
echo File is file1.txt
File is file1.txt
echo File is file2.txt
File is file2.txt
echo File is file3.txt
File is file3.txt
Проблема заключается в том, я хочу, чтобы определить variable
путем анализа файла, и я хочу этот файл является зависимым, потому что, если он не существует, я сделаю его, используя другое правило в make-файле. Поэтому, когда я определяю переменную в правиле, как это (который я знаю, есть от моего эхо):
target1 :
$(eval variable = file1.txt file2.txt file3.txt)
echo $(variable)
run : $(variable)
$(variable): %.txt:
echo File is [email protected]
я получаю следующее:
$ make target1
echo file1.txt file2.txt file3.txt
file1.txt file2.txt file3.txt
И это:
$ make run
make: Nothing to be done for `run'.
Итак, мой вопрос заключается в том, как определить переменную в правиле и использовать ее в строке:
$(variable): %.txt:
echo File is [email protected]
Я пробовал прочитать руководство и Google, но я просто не могу понять это. Я также думаю, что есть простой ответ, который я пропускаю. Большое спасибо за Вашу помощь! :)
Это не работает из-за способа make works: FIRST make обрабатывает ENTIRE makefile, расширяя переменные и т. Д. По мере необходимости. THEN make начинает запускать рецепты для устаревших правил. Таким образом, к тому времени, когда make запускает рецепт для 'target1', который содержит' eval', остальная часть make-файла уже была проанализирована, а 'variable' уже была расширена (до пустой строки). – MadScientist