代码之家  ›  专栏  ›  技术社区  ›  Terrence Brannon

makefile可以有一个目录作为目标吗?

  •  16
  • Terrence Brannon  · 技术社区  · 14 年前

    我想说的是,“只有当目录Yank/存在时,才可以下载Git存储库。如果目录Yank/不存在,则将其设置为“

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

    我在用马克普- 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] 
    

    但是,如果存在的话,它为什么要尝试创建Yank目录呢?“源”已经创建…

    3 回复  |  直到 11 年前
        1
  •  20
  •   Benjamin Bannier    11 年前

    是的,A Makefile 可以将目录作为目标。

    你的问题可能是 cd 不做你想做的:它做了 光盘 以及 git clone 在原始目录(即 光盘 你的那一个 光盘 ED)。这是因为 生成文件 将创建一个额外的外壳。解决方法是运行 光盘 用shell的 && .

    这应该有效:

    bla/f: dir
        cd dir && touch f
    
    dir:
        mkdir dir
    
        2
  •  10
  •   Community miroxlav    7 年前

    In a makefile, is a directory name a phony target or "real" target?

    你需要的是 order-only prerequisite .

    快速搜索没有找到任何关于makepp和仅订购先决条件的参考,但它可能仍然有效。

        3
  •  1
  •   Gilles 'SO- stop being evil'    14 年前

    你的makefile应该做你期望的。因为洋基没有依赖性,如果它存在的话,就不会被重新制作。所以这看起来像是makepp中的一个bug。您可以通过使用make的传统实现来尝试makefile来确认这一点。