makefile可以将目录作为目标吗?

Ter*_*non 17 makefile makepp

我试图说"git存储库的下载只有在目录yank /存在时才会起作用.如果目录yank /不存在那么就成功"

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

yank:
    mkdir yank
Run Code Online (Sandbox Code Playgroud)

我正在使用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] 
Run Code Online (Sandbox Code Playgroud)

但是为什么它会尝试使yank目录存在?"源"已经创建了......

Ben*_*ier 22

是的,a Makefile可以将目录作为目标.

你的问题可能是你cd没有做你想做的事情:它确实存在cd并且git clone在原始目录中执行(你cd编辑的目录,而不是cd编辑的目录).这是因为Makefile创建了额外shell 中的每个命令.解决方法是cd使用shell 运行和克隆为一个命令&&.

这应该工作:

bla/f: dir
    cd dir && touch f

dir:
    mkdir dir
Run Code Online (Sandbox Code Playgroud)

  • 我通常使用`dir/.dirstamp`而不是`dir`的目标,其规则为`mkdir -p dir && touch $ @`.当目录内容发生变化,防止依赖规则运行时,unix中dirs的时间戳会发生变化. (13认同)

alt*_*dky 12

在makefile中,目录名是伪目标还是"真实"目标?

您需要的是仅限订单的先决条件.

快速搜索没有找到任何关于makepp和仅限订单的先决条件的参考,但它仍然可以工作.