makefile, обработать несколько файлов - PullRequest
2 голосов
/ 24 марта 2011

Как я могу обработать несколько файлов в make-файле (gnu make), и:

  • выполнить одну команду или серию команд для каждого файла
  • с ошибкой при одной ошибкекод больше нуля
  • нет необходимости вводить каждое имя файла в make-файле
  • продолжать запускаться на всех файлах даже после первого сбоя

Я пришелс этим.это работает, за исключением последнего требования, и очень 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

Ответы [ 2 ]

3 голосов
/ 24 марта 2011

Более make-like транскрипция вашего оригинального make-файла:

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

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

Мне действительно действительно не нравится использование $(shell…) в файлах make-файлов.Лично я бы перечислил все файлы в Makefile, возможно, с целью утверждать, что список завершен.

Если вам требуется последняя точка («продолжить работу со всеми файлами даже после первого сбоя»), тогдаиспользуйте make -k.

1 голос
/ 24 марта 2011

Я бы посоветовал вам переписать его, чтобы он был более в стиле make, то есть примерно так:

files = ....

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

lint: $(lint_targets)

.PHONY: lint $(lint_targets)

$(lint_targets): 
    @php -l $(basename $@)
...