我在一个 Web 应用程序上工作,其 Makefile 包含以下内容:
dist/index.html: src/templates/index.html
@bin/insert-scripts $< --output $@
bin/insert-scripts在提供的文件中替换<--scripts-->
为以下内容之一:
- 当 $ENV 为“开发”时,许多脚本标签(用于 jQuery、Underscore 等),或
- 当 $ENV 为“生产”时,单个脚本标签(指向连接的、缩小的文件)。
问题是,如果一个人在一种模式下构建 dist/index.html(比如“开发”),然后在另一种模式下再次构建它而不触及依赖项,make 会说没有什么可做的。我想做的是使 $ENV 成为 dist/index.html 的依赖项:
dist/index.html: src/templates/index.html $ENV
@bin/insert-scripts $< --output $@
这当然行不通,所以我考虑有一个名为 ENV 的文件,其中包含“开发”或“生产”。该文件将成为依赖项:
dist/index.html: src/templates/index.html ENV
@bin/insert-scripts $< --output $@
与其设置环境变量,不如设置 ENV 文件的内容。这看起来有点笨拙,但至少准确地表示了依赖关系树。
处理这种情况的最佳方法是什么?