3

我如何处理makefile(gnu make)中的多个文件,以及:

  • 为每个文件运行一个命令或一系列命令
  • 在大于零的单个错误代码上失败
  • 无需在 makefile 中键入每个文件名
  • 即使在第一次失败后继续在所有文件上运行

我想出了这个。它可以工作,除了最后一个要求,并且非常unMake:

.PHONY: lint
.PHONY: all

all: lint

lint:
    for f in `find src/ -name \*.inc -o -name \*.html`; do php -l $$f && continue || exit 1; done
4

2 回答 2

3

您的原始 makefile 的更类似于 make 的转录:

files := $(shell find src/ -name \*.inc -o -name \*.html)
.PHONY: ${files}
${files}: ; php -l $@

.PHONY: lint
lint: ${files} ; echo Lint finished

我真的很不喜欢$(shell…)在 makefiles 中使用。就个人而言,我会列出 Makefile 中的所有文件,也许还有一个目标是断言列表是完整的。

如果您需要最后一点(“即使在第一次失败后仍继续在所有文件上运行”),请使用make -k.

于 2011-03-24T17:49:26.353 回答
1

我建议您将其重写为更具制作风格,即:

files = ....

lint_targets = $(addsuffix .lint, $(files))

lint: $(lint_targets)

.PHONY: lint $(lint_targets)

$(lint_targets): 
    @php -l $(basename $@)
于 2011-03-24T07:52:50.227 回答