在Makefile中,如何使用单个编译命令更新多个目标?

时间:2012-05-24 23:55:48

标签: makefile gnu-make

我将.coffee文件分开,我已经使用Makefile将它们编译成多个相应的.js文件。我的规则:

tmp/coffee/%.js: src/js/%.coffee
    coffee --compile --output $(@D) $?

看起来像这样:

$ make static
coffee --compile --output tmp/coffee/global src/js/global/admin.coffee
coffee --compile --output tmp/coffee/global src/js/global/ads.coffee

我想优化我的构建过程,以便调用咖啡编译器一次编译所有更新的文件。这对于干净的构建尤其重要。

所以它看起来像这样:

$ make static
coffee --compile --output tmp/coffee/global src/js/global/ads.coffee src/js/global/admin.coffee

1 个答案:

答案 0 :(得分:1)

您已经在使用$?,您真正需要的是让目标依赖于所有文件。也许你想保留一个单独的标志文件,比如.built

.built: $(wildcard src/js/global/*.coffee)
        coffee --compile --output tmp/coffee/global $?
        touch $@

您可能希望重构现有的Makefile,这样就不会有任何代码重复。

我假设您的所有文件都在global中,就像您的示例所说,但不是您现有的代码。如果有多个子目录,则无法一次性编译它们(--output参数可能每个都不同。)