Я пытаюсь понять, почему я не могу указать цель как находящуюся в другом каталоге.Как указать цель makefile в другом каталоге?
Я пытаюсь сгенерировать некоторые php-классы из json-файлов, но я изменил строку, которая фактически генерирует php для фиктивного утверждения эха, поэтому кто-то еще может просто скопировать пасту и проверить, чувствуют ли они себя очень щедрыми.
Есть две вещи, чтобы добавить в каталог, содержащий Makefile:
- Файл фиктивная зависимость называется PatientDbPath.json
- Каталог окликнул
Если у меня есть Makefile в том числе:
.SUFFIXES: .php .json
.json.php:
echo "HelloMe" > PatientDbPath.php
PatientDbPath.php: PatientDbPath.json
clean:
$(RM) PatientDbPath.php
Тогда все работает, когда я запустить make; PatientDbPath.php создан правильно и в следующий раз я бегу сделать, я получаю сообщение make: 'PatientDbPath.php' is up to date.
Однако я хочу, чтобы создать файл PHP в отдельном каталоге, так что я обновил свой Makefile на следующее:
.SUFFIXES: .php .json
.json.php:
echo "HelloMe" > out/PatientDbPath.php
out/PatientDbPath.php: PatientDbPath.json
clean:
$(RM) out/PatientDbPath.php
Как только я это сделаю, Make сообщает мне make: Nothing to be done for 'out/PatientDbPath.php'
, хотя в каталоге out нет файла PatientDbPath.php.
Так что я подумал, что это было что-то с правилами суффикса, и я создал третий make-файл.
out/PatientDbPath.php: PatientDbPath.json
echo "Whatever" > out/PatientDbPath.php
clean:
rm out/PatientDbPath.php
Это хорошо работает, как и первый. Может ли кто-нибудь увидеть, что я делаю неправильно в своем втором make-файле?
Спасибо.
Спасибо за ответ, я попытаюсь изменить свой настоящий make-файл, чтобы использовать предложенные обозначения. Я буду следить или отметить, что он ответил в ближайшее время. Что касается концептуальных проблем, то, что я разместил здесь, это всего лишь образец makefile, который показывает проблему, а не как мой настоящий make-файл. –
Хорошо, я протестировал его, и вы были абсолютно правы, изменив мой makefile, чтобы использовать 'out /%. Php:% .json' сделал трюк. У меня есть следующий вопрос. Мне нужно создать отдельное правило для каждого .json-файла в этом каталоге? –
Я нашел решение для того, что хотел, в основном мне нужно добавить следующую строку: 'all :: $ (patsubst% .json, out /%. Php, $ (wildcard * .json))' Это добавит зависимость каждого из php-файлов, которые должны быть сгенерированы из каждого из .json в этом каталоге –