views:

42

answers:

2

I am trying to say "the download of the git repository will only work if the directory yank/ exists. If the directory yank/ does not exist then make it"

yank/gist.el/gist.el : yank
    cd yank ; git clone http://github.com/defunkt/gist.el.git 

yank:
    mkdir yank

I am using makepp - http://makepp.sf.net and am getting the error:

[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] 

But why would it try to make the yank directory if it exists? The "source" has already ben created...

+1  A: 

Yes, a Makefile can have a directory as target.

Your problem could be that the cd doesn't do what you want: it does cd and the git clone is carried out in the original directory (the one you cded from, not the one you cded to). This is because for every command in the Makfile an extra shell is created. A workaround is to run cd and clone as one command with the shell's &&.

This should work:

bla/f: dir
    cd dir && touch f

dir:
    mkdir dir
honk
True, and on general principles makefiles should always ``. However this can't be an issue here: `cd` only runs *after* the `yank` target has been remade.
Gilles
+1  A: 

Your makefile should do what you expect. Since yank has no dependency, it won't be remade if it exists. So this looks like a bug in makepp. You could confirm this by trying your makefile with a traditional implementation of make.

Gilles
I tried, and it wasn't reproduced.
Pavel Shved