使用autotools构建时如何生成源文件

Jer*_*wen 10 automake autoconf makefile autotools

有了Make,我会做类似的事情

generated.c: input.txt generator
    ./generator input.txt > generated.c
Run Code Online (Sandbox Code Playgroud)

我如何从autotools中获得相同的功能?(在清洁时删除generated.c也是一个奖励).

adl*_*adl 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
Run Code Online (Sandbox Code Playgroud)

在某些情况下,比如生成头文件时,在编译其余源代码之前生成文件很重要,因此可以包含它.在这种情况下,您还应该在变量中列出生成的文件BUILT_SOURCES(Automake手册在其Built sources部分中有许多示例.在上面的例子中,没有必要.

编辑:我已修复上述Makefile.am示例以声明generator为未安装的程序.