我正在尝试使用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'
这可能做到还是有更好的解决方案?
答案 0 :(得分:0)
无条件地制作foo_SOURCES = bar.c foo.c
。如果HAVE_RAGEL
为真且foo.rl
比foo.c
更新,则foo.c
将被重新制作。如果HAVE_RAGEL
为false,则始终会使用原始foo.c
。
您也可以考虑将foo.c
添加到BUILT_SOURCES
和MAINTAINERCLEANFILES
。