Может ли файл makefile иметь каталог как цель?
Я пытаюсь сказать: "загрузка репозитория git будет работать, только если каталог yank/существует. Если каталог yank/не существует, сделайте его"
yank/gist.el/gist.el : yank
cd yank ; git clone http://github.com/defunkt/gist.el.git
yank:
mkdir yank
Я использую makepp - http://makepp.sf.net
и я получаю ошибку:
[[email protected] ~/edan/pkg/gist.el] makepp
makepp: Loading makefile `/home/metaperl/edan/pkg/gist.el/Makeppfile'
makepp: Entering directory `/home/metaperl/edan/pkg/gist.el'
mkdir yank
mkdir: cannot create directory `yank': File exists
makepp: error: Failed to build target `/home/metaperl/edan/pkg/gist.el/yank' [1]
makepp: 0 files updated, 0 phony targets built and 1 target failed
[[email protected] ~/edan/pkg/gist.el]
Но зачем он пытается создать каталог yank, если он существует? "Источник" уже создан ben...
Ответы
Ответ 1
Да, Makefile
может иметь каталог как цель.
Ваша проблема может заключаться в том, что cd
не делает то, что вы хотите: он выполняет cd
, а git clone
выполняется в исходном каталоге (тот, который вы cd
ed, а не тот вы cd
ed до). Это связано с тем, что для каждой команды в Makefile
создается дополнительная оболочка. Обходным путем является запуск cd
и клонирование как одна команда с оболочкой &&
.
Это должно работать:
bla/f: dir
cd dir && touch f
dir:
mkdir dir
Ответ 2
В файле makefile есть имя каталога фальшивой цели или "real" таргетинг?
Вам нужно предварительное условие для заказа.
Быстрый поиск не показывал ссылок на makepp и предварительные условия только для заказа, но он все равно может работать.
Ответ 3
Ваш make файл должен делать то, что вы ожидаете. Поскольку yank не имеет зависимости, он не будет переделан, если он существует. Таким образом, это выглядит как ошибка в makepp. Вы можете подтвердить это, попробовав свой make файл с традиционной реализацией make.