Почему Make продолжает создавать каталог снова и снова?
У меня есть make-файл, который создает некоторые документы из моего источника:
/home/share/htdocs:
#installs apache and make sure we have /htdocs...
/home/share/htdocs/doxjs: /home/share/htdocs
mkdir -p $@
chgrp users $@
chmod g+w $@
/home/share/htdocs/dox: /home/share/htdocs
mkdir -p $@
chgrp users $@
chmod g+w $@
.PHONY: dox
dox: /home/share/htdocs/dox /home/share/htdocs/doxjs
# runs doxygen
cp -r dox/html/* /home/share/htdocs/dox/
cp -r doxjs/html/* /home/share/htdocs/doxjs/
Эти правила должны просто создавать и устанавливать разрешение на обслуживание файлов из htdocs, сборку документов и их перемещение.
но когда я бегу. он всегда будет пытаться создать /home/share/htdocs/dox
есть идеи почему?
даже если я использую:
.PHONY: setup
setup: /home/share/htdocs/dox /home/share/htdocs/doxjs
вот что я получаю:
$ sudo rm -fr /home/share/htdocs/dox*
$ sudo make setup
mkdir -p /home/share/htdocs/dox
chgrp users /home/share/htdocs/dox
chmod g+w /home/share/htdocs/dox
mkdir -p /home/share/htdocs/doxjs
chgrp users /home/share/htdocs/doxjs
chmod g+w /home/share/htdocs/doxjs
$ sudo make setup
mkdir -p /home/share/htdocs/dox
chgrp users /home/share/htdocs/dox
chmod g+w /home/share/htdocs/dox
$ sudo make setup
mkdir -p /home/share/htdocs/dox
chgrp users /home/share/htdocs/dox
chmod g+w /home/share/htdocs/dox
Зачем? Я предполагаю, что я не вижу некоторого конфликта с измененными временами. Но я не могу себе представить, что.
2 ответа
Я смоделировал вашу структуру и использовал make -r -d setup
, где -d
показывает выходные данные отладки, и -r
игнорирует встроенные правила, поэтому вывод меньше. Соответствующая часть
Considering target file 'setup'.
File 'setup' does not exist.
Considering target file 'htdocs/dox'.
Considering target file 'htdocs'.
Finished prerequisites of target file 'htdocs'.
No need to remake target 'htdocs'.
Finished prerequisites of target file 'htdocs/dox'.
Prerequisite 'htdocs' is newer than target 'htdocs/dox'.
Must remake target 'htdocs/dox'.
Итак, после спуска в htdocs
этот каталог получает более новое время доступа, чем htdocs/dox
, и поэтому make
приходит к выводу, что это должно быть переделано.
Решение: не используйте родительский каталог в качестве предварительного условия.
На самом деле, вся установка для создания каталогов, а затем запуска в них make, немного сложна; все, что вы хотите достичь, вы должны быть в состоянии достичь этого с помощью статической структуры каталогов.
Ты пробовал бегать make -d
? Согласно справочной странице, это обеспечивает:
Отладка информации в дополнение к обычной обработке. Информация об отладке говорит о том, какие файлы рассматриваются для переделывания, какое время файла сравнивается и с какими результатами, какие файлы действительно нужно переделать, какие неявные правила рассматриваются и какие применяются - все интересное о том, как решает make что делать.