使用automake生成源代码的后备

时间:2013-11-17 03:38:09

标签: autotools automake

我正在尝试使用ragel生成源代码并进行autoconf测试以检测是否存在ragel。我想将生成的源保留在VCS中,这样用户就不需要ragel来构建它了。但如果存在,我希望它被使用。

制作一个简单的Makefile.am来演示我尝试的内容:

bin_PROGRAMS = foo
foo_SOURCES = bar.c

if HAVE_RAGEL
foo_SOURCES += foo.rl
else
foo_SOURCES += foo.c
endif

if HAVE_RAGEL
.rl.c:
        $(AM_V_GEN)$(RAGEL) $(RAGELFLAGS) -C $< -o $@
endif

然而它失败了:

Makefile.am: object `foo.$(OBJEXT)' created by `foo.cpp' and `foo.rl'

这可能做到还是有更好的解决方案?

1 个答案:

答案 0 :(得分:0)

无条件地制作foo_SOURCES = bar.c foo.c。如果HAVE_RAGEL为真且foo.rlfoo.c更新,则foo.c将被重新制作。如果HAVE_RAGEL为false,则始终会使用原始foo.c

您也可以考虑将foo.c添加到BUILT_SOURCESMAINTAINERCLEANFILES