当 make 目标可以从不同的源文件扩展名构建时 DRY

DRY when make targets can be built from different source file extensions

我正在从 .ts 和 .tsx 文件构建 .js 文件。它们的构建方式完全相同,理想情况下我不想重复规则。现在,以下工作:

$(out)/%.js: %.ts
    @mkdir --parents $(@D)
    BABEL_ENV=node babel $(<) --out-file $(@) --source-maps

$(out)/%.js: %.tsx
    @mkdir --parents $(@D)
    BABEL_ENV=node babel $(<) --out-file $(@) --source-maps

有没有办法告诉 make 在先决条件列表中查找 .ts 或 .tsx?

不,没有办法。

您可以通过将食谱放入变量来减少重复:

define BUILD_JS
@mkdir --parents $(@D)
BABEL_ENV=node babel $(<) --out-file $(@) --source-maps
endif

$(out)/%.js: %.ts
        $(BUILD_JS)

$(out)/%.js: %.tsx
        $(BUILD_JS)