Я изучаю make-файлы и не могу просто обернуть голову вокруг этой проблемы, которую у меня есть, и хотел бы понять, как/почему это не удается.Правила шаблона Makefile не работают
У меня есть полдюжины файлов erlang в каталоге src
. Я хочу скомпилировать их в каталог ebin
, не требуя определения правила для каждого из них. Согласно документации Gnu make, pattern rules should be right up my alley.
Однако со следующим make-файлом все, что я получаю от make, - make: *** No targets. Stop
. Почему это?
ebin/%.beam: src/%.erl
mkdir -p ebin
erlc -o ebin $<
Edit: На основе this answer, теперь я понимаю, что я должен был бы явно объявлять цели, например, с помощью make ebin/cmplx.beam
. Тем не менее, я до сих пор не понимаю, как я должен писать свой make-файл, чтобы получить мое желаемое поведение - поскольку у меня есть полдюжины целей (а в других проектах - еще больше), это кажется ненужной проблемой. Не существует способа определить цели на основе имен исходных файлов?
Возможный дубликат [правило шаблона шаблона файла не работает?] (Http://stackoverflow.com/questions/5155510/makefile-pattern-rule-fails) –
Make-файлы являются старыми и слишком низкоуровневыми (это означает: слишком легко сделать человеческие ошибки) способ создания программного обеспечения. Для Erlang, если вы действительно хотите придерживаться Make-файлов, я предлагаю очень хороший https://erlang.mk. Если вы хотите рассмотреть другие варианты, то https://www.rebar3.org. Вне Erlang, рассмотрите https://cmake.org/, который будет генерировать либо Makefiles, либо (лучше!) Настройки ниндзя. –