В моей программе у меня несколько сложный процесс сборки. В настоящее время в одном каталоге я использую include
в Makefile.am
с файлом, который не существует, но его нужно строить самостоятельно. Причина в том, что этот файл довольно длинный. Далее в реальной программе это не только один файл, но несколько, и процесс генерации этого файла может время от времени меняться.Сгенерировать включить файлы для Makefile тем же Makefile
Makefile.am
выглядит как этот
noinst_LIBRARIES = libtest.a
nodist_libtest_a_SOURCES = file.c
CLEANFILES = file.c Make_file.mk
$(builddir)/Make_test.mk: $(srcdir)/Perl/generate_mk_files.pl
perl $(srcdir)/Perl/generate_mk_files.pl file
include $(builddir)/Make_file.mk
После создания Make_file.mk
он выглядит что-то вроде
$(builddir)/file.c: $(srcdir)/file.template $(srcdir)/Perl/generate_c.pl
perl $(srcdir)/Perl/generate_c.pl $(srcdir)/file.template
Automake работает, а окончательный процесс сборки, а также. Выход на make
что-то вроде (я замкнута это несколько):
Makefile:721: Make_file.mk: Datei oder Verzeichnis nicht gefunden (file not found)
perl ../../../../src/components/test/Perl/generate_mk_files.pl test
perl ../../../../src/components/test/Perl/generate_c.pl ../../../../src/components/test/file.template
Поэтому make
первый жалуется, что файл включает не найден, а затем создает его, а затем следует также правила включаемого файла.
Хотя я рад, что он работает, я задаюсь вопросом, почему. Во-первых, я думал, что make
загружает Makefile
. На этом этапе Make_file.mk
не существует. Поэтому кажется, что Makefile
загружен более одного раза.
Далее, manual из Automake для include
состояний:
Обратите внимание, что эти фрагменты читаются и интерпретируются Automake, не сделать.
Это не то, что я вижу, так как включенный фрагмент не существует во время выполнения Automake.
Мои вопросы в основном являются:
- Почему это работает?
- Это правильный способ сделать это или использовать другой подход, например. начиная с новых экземпляров
make
в пределахMakefile
.
Благодарим вас за комментарий. Я думаю, что в основном объясняет, почему он работает. Я буду проверять руководство по эксплуатации для более подробной информации. Я не буду принимать ответ, но, возможно, у кого-то есть лучшее представление о том, как справиться с моим сценарием. – Nemesis
FYI, проблема с посторонними ошибками была исправлена в новых версиях GNU make (4.2 и выше); вам больше не нужно использовать '-include' для его подавления. – MadScientist