如何告诉AC_SUBST不替换参数中的变量?

时间:2014-06-10 17:56:56

标签: c++ autotools autoconf automake m4

我使用autotools来构建我的项目,我想将AM_CPPFLAGS全局设置为-I $(top_srcdir)/ include。

https://stackoverflow.com/a/325436/2592351这个回答帮助了我,我做了"包括$(top_srcdir)/ include"黑客,它的工作原理。

但是我想做" AC_SUBST"在那里描述的方式看起来更干净。问题是我将它添加到我的configure.ac:

AC_SUBST([AM_CPPFLAGS], [-I$(top_srcdir)/include])

然后$(top_srcdir)过早展开,我在subdir / Makefile {,。in}中得到AM_CPPFLAGS = -I / include。

我不知道怎么逃避它。

-I@top_srcdir@/include
-I\$(top_srcdir)/include
-I$$(top_srcdir)/include

所有这些因各种原因而失败。

请帮忙。我应该如何编写AC_SUBST,以便$(top_srcdir)在获取Makefile {,。in}之前不会被转义?或者我应该使用AC_SUBST以外的东西?

1 个答案:

答案 0 :(得分:1)

请勿在{{1​​}}中设置AM_CPPFLAGS。如果您发现自己在多个configure.ac中重复相同的序言,那么您应该使用non-recursive automake

但在这种特殊情况下,如果你这样做,你应该侥幸成功

Makefile.am

因为然后字符串在bash变量中被引用,然后作为文字扩展。使用AM_CPPFLAGS='-I$(top_srcdir)/include' AC_SUBST([AM_CPPFLAGS]) 进行设置,AC_SUBST引用它,然后导致""进行shell扩展。