у меня есть 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 ответа2

1

Вы пробовали запустить make -d? Согласно справочной странице, это обеспечивает:

Отладка информации в дополнение к обычной обработке. Отладочная информация говорит о том, какие файлы рассматриваются для переделывания, какое время файла сравнивается и с какими результатами, какие файлы действительно нужно переделать, какие неявные правила рассматриваются и какие применяются - все интересное о том, как решает make что делать.

1

Я смоделировал вашу структуру и использовал команду 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 немного сомнительны; все, что вы хотите достичь, вы должны быть в состоянии достичь этого с помощью статической структуры каталогов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .