Как сгенерировать исходный файл при сборке с использованием автоинструментов - PullRequest
10 голосов
/ 09 июня 2011

С помощью Make я делаю что-то вроде

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

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

1 Ответ

19 голосов
/ 09 июня 2011

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

РЕДАКТИРОВАТЬ : Я исправил приведенный выше пример Makefile.am, чтобы объявить generator как неустановленную программу.

...