Есть ли прочь, чтобы заставить make применить правило к каждому файлу, который соответствует шаблону?

Я работаю над проектом, который имеет структуру каталогов, которая выглядит примерно так:

inputs/ a.txt b.txt c.txt outputs/ a.out b.out c.out makefile 

Файлы в папке outputs генерируются из файлов в папке inputs и я хочу автоматически обновлять их, когда изменяется один из входных файлов.

Я попытался сделать это, создав make-файл с правилом шаблона. (Чтобы этот вопрос был прост, я просто копирую входной файл вместо его преобразования)

 outputs/%.txt: inputs/%.out cp $< $@ 

Однако этот make-файл не совсем сделал то, что я хочу. Если я запустил make outputs/a.txt он применит правило, которое я написал и регенерировал выходной файл, если он устарел, но если я просто запустил make ничего не произойдет:

 make: *** No targets. Stop. 

Есть ли способ сказать, что по умолчанию я хочу сгенерировать выходной файл для каждого файла в папке с входами?

edit : сделанные выходные файлы имеют другой суффикс файла, чем входные файлы.

One Solution collect form web for “Есть ли прочь, чтобы заставить make применить правило к каждому файлу, который соответствует шаблону?”

Обычно вы делаете это с make-файлом примерно так:

 IN = $(wildcard inputs/*.txt) OUT = $(subst inputs/,outputs/,$(IN)) outputs/%.txt: inputs/%.txt cp $< $@ default: $(OUT) 

Это делает цель по умолчанию (первая в файле), зависит от OUT которая является расширением glob существующих файлов в IN с изменением строки каталога с входов на выходы.


Если вы хотите изменить суффикс, есть множество других встроенных функций для управления целями. Например, вы можете добавить промежуточную операцию:

 IN2 = $(addsuffix .out,$(basename $(IN))) 

Функция basename удалит конечный .txt , а addsuffix добавит конечный .out .

  • X11 / Xlib.h: нет такого файла или каталога
  • Использование правила make для вызова другого
  • Пожалуйста, объясните, что происходит, когда я запускаю этот Makefile
  • Как изменить параметры компилятора с помощью AutoMake?
  • Как удалить конечные пробелы из переменной makefile?
  • установить переменную, основанную на значении переменной среды
  • Где расположена база данных?
  • Неустранимая ошибка: linux / smp_lock.h: Нет такого файла или каталога
  • makefile использует тот же прием для нескольких целей
  • gedit: вкладки или пробелы, зависящие от синтаксиса
  • Что означают $ @ и $ <в файле makefile?
  • Linux и Unix - лучшая ОС в мире.