Как сгенерировать исходный файл при сборке с помощью автоинструментов

С Make я делаю что-то вроде

generated.c: input.txt generator
    ./generator input.txt > generated.c

Как я могу получить эквивалентную функциональность из автоинструментов? (удаление generate.c при очистке также будет бонусом).


person Jeremy Salwen    schedule 08.06.2011    source источник


Ответы (1)


Я предполагаю, что input.txt является исходным файлом, который распространяется, что вы не хотите распространять generated.c (т. е. он должен быть создан каждым пользователем), а generator – это программа, созданная вашим пакет тоже.

EXTRA_DIST = input.txt
bin_PROGRAMS = prog
noinst_PROGRAMS = generator

# Source files for the generator
generator_SOURCES = generator.c ...

# Source files for prog
prog_SOURCES = prog.c ...
nodist_prog_SOURCES = generated.c 

# generated.c is a built source that must be cleaned
CLEANFILES = generated.c

# Build rule for generated.c
generated.c: $(srcdir)/input.txt generator$(EXEEXT)
        ./generator$(EXEEXT) $(srcdir)/input.txt

В некоторых ситуациях, например при создании файлов заголовков, важно создать файл до компиляции остальных исходных кодов, чтобы его можно было включить. В этом случае вы также должны указать сгенерированный файл в переменной BUILT_SOURCES (в руководстве Automake есть много примеров в его Раздел встроенных источников. В приведенном выше случае это не обязательно.

EDIT: я исправил приведенный выше пример Makefile.am, чтобы объявить generator неустановленной программой.

person adl    schedule 09.06.2011
comment
Спасибо, именно то, что я искал, и ссылки, чтобы прочитать больше, тоже! - person Jeremy Salwen; 09.06.2011
comment
У меня есть дополнительный вопрос относительно того, как сделать эта работа для сборок VPATH. - person Craig McQueen; 20.08.2013
comment
@Крейг ответил. ХТН. - person adl; 26.08.2013