代码之家  ›  专栏  ›  技术社区  ›  dave mankoff

子项目的主生成文件不会编译子项目

  •  3
  • dave mankoff  · 技术社区  · 17 年前

    all: a b c
    
    a:
        @cd a && make
    
    b:
        @cd b && make
    
    c:
        @cd c && make
    

    项目A和B都编译得很好,但对于第三个项目,它告诉我没有什么要做的,尽管切换到C目录并运行make实际上编译了代码。

    make JS_DIST=/usr JS_THREADSAFE=1 JS_HAS_FILE_OBJECT=1
    

    在我的主Makefile中,我有:

    spidermonkey:
        @cd spidermonkey/src && $(MAKE) JS_DIST=/usr JS_THREADSAFE=1 JS_HAS_FILE_OBJECT=1
    

    .PHONY: spidermonkey
    

    以及将spidermonkey规则重命名为sm,但仍然没有变化。

    我的错!我本应该有标签的时候却有空位!

    2 回复  |  直到 17 年前
        1
  •  4
  •   JesperE    17 年前

     a:
           <some command>
    

     .PHONY: a
    

    .

        2
  •  1
  •   hlovdal    17 年前

    只检查是否存在与规则目标同名的文件(或目录),如果存在(并且比依赖项新),那么从Make的角度来看,就没有什么可做的了。

    所以你的问题是,你有一个spidermonkey规则(没有依赖关系)和一个名为spidermonkey的目录,然后make认为“目标已经创建,我什么都不用做”。要使make执行您想要的操作,请重命名spidermonkey规则(或目录)。

    顺便说一句,说到递归制作,这不一定是个好主意, Recursive Make Considered Harmful .

    推荐文章