Я пытаюсь сказать, что "загрузка репозитория мерзавца будет только работать, если каталог, 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 и получаю ошибку:
[metaperl@andLinux ~/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
[metaperl@andLinux ~/edan/pkg/gist.el]
Но почему это попыталось бы сделать каталог рывка, если это существует? "Источник" уже имеет ben созданный...
Да , Makefile
может иметь каталог в качестве целевого.
Ваша проблема может заключаться в том, что cd
не выполняет то, что вы хотите: он выполняет cd
, а git clone
выполняется в исходном каталоге. (тот, откуда вы cd
, , а не тот, на котором вы cd
). Это потому, что для каждой команды в Makefile
создается дополнительная оболочка. Обходной путь - запустить cd
и клонировать как одну команду с &&
оболочки.
Это должно работать:
bla/f: dir
cd dir && touch f
dir:
mkdir dir
Ваш makefile должен сделать то, что вы ожидаете. Поскольку yank не имеет зависимости, он не будет переделан, если он существует. Так что это похоже на ошибку в makepp. Вы можете подтвердить это, попробовав ваш makefile с традиционной реализацией make.