使用Make,我会做类似
的事情generated.c: input.txt generator
./generator input.txt > generated.c
我如何从autotools中获得相同的功能? (在清洁时删除generated.c也是一种奖励)。
答案 0 :(得分:19)
我假设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手册在其Built sources section中有很多示例。在上述情况下,没有必要。
编辑:我已修复上述Makefile.am
示例,将generator
声明为未安装的程序。