d
для создания каталогов r
для удаления файлов из tempfiles.d (5)
. Другие вещи вам не нужны, попробуйте:
d /tmp 1d
d
Create a directory if it does not exist yet.
D
Create or empty a directory.
r
Remove a file or directory if it exists. This may not be used to
remove non-empty directories, use R for that. Lines of this type
accept shell-style globs in place of normal path names. Does not
follow symlinks.
R
Recursively remove a path and all its subdirectories (if it is a
directory). Lines of this type accept shell-style globs in place
of normal path names. Does not follow symlinks.
Вот мой собственный ответ, который был получен из идеи, представленной Филипе Бранденбургером, и из общих методов, используемых в системе Schily Makefile:
Система makefile гарантирует, что следующие make macros
настроены таким образом:
WAIT= # empty with GNU make
WAIT=.WAIT #.WAIT special target with SunPro Make
MAKEPROG= <name of the make program> # This is from: smake, gmake, sunpro
_UNIQ=.XxZzy-
Теперь make-файл, использующий приведенные выше определения макросов.:
_NORULE= $(_UNIQ)$(MAKEPROG)
__NORULE= $(_NORULE:$(_UNIQ)gmake=)
NORULE= $(__NORULE:$(_UNIQ)%=%)
install: dir $(WAIT) dir/file
dir/file: source
cp source dir/file
dir:
mkdir -p dir
$(NORULE)dir/file: | dir
$(NORULE)
расширяется до нуля с помощью gmake и до sunpro
с помощью SunPro Make.
В случае gmake весь make-файл расширяется до:
install: dir dir/file
dir/file: source
cp source dir/file
dir:
mkdir -p dir
dir/file: | dir
В случае SunPro Make весь make-файл расширяется до:
install: dir.WAIT dir/file
dir/file: source
cp source dir/file
dir:
mkdir -p dir
sunprodir/file: | dir
Последняя строка рассматривается как нежелательное правило, не имеющее отношения к делу.
В GNU make вы можете использовать порядок -только -предварительные условия , чтобы убедиться, что dir
создан до запуска правила для создания dir/file
.
Подробнее см. на этой странице .
Из примера в руководстве GNU make видно, что он действительно предназначен для добавления зависимости от создаваемого каталога перед созданием в нем файлов.
В случае вашего конкретного примера это должно делать что-то вроде этого:
dir/file: | dir
cp source dir/file
Хотя вам не нужно изменять существующее правило, вы можете просто добавить эту зависимость где-нибудь еще в вашем Makefile...
To be more specific, the solution needs to be written in a way that allows the makefile to be processed with other make implementations.
Я не думаю, что это сработает в других реализациях make... Одно из возможных решений — создать GNUmakefile
, который будетinclude
фактическим Makefile
, а также добавить специальные расширения GNU make.
Возможно, вы также могли бы заставить GNU make игнорировать такое правило, как .WAIT
, определив его как фиктивное правило в вашем GNUmakefile
.
Я надеюсь, что эти указатели будут вам полезны!
Нужно добавить зависимости, чтобы каталоги создавались раньше файлов в них.
Можно использовать «маркерный» файл для зависимости от каталога, таким образом, создание файла под ним не будет касаться временной метки каталога. Это также не требует каких-либо специальных функций GNU.
В вашем примере:
install: dir/file
dir/.marker:
mkdir -p dir
touch dir/.marker
dir/file: dir/.marker
cp source dir/file
Вы можете использовать что-то вроде .directory
, .dir
или .folder
для файла маркера...