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

How to tell AC_SUBST to not substitute variables in arguments?

本文关键字:参数 变量 替换 何告诉 AC SUBST      更新时间:2023-10-16

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

https://stackoverflow.com/a/325436/2592351这个答案帮助了我,我正在做"include $(top_srcdir)/include"hack,它工作了。

然而,我想做"AC_SUBST"的方式描述,因为它看起来更干净。问题是当我把这个添加到configure.ac:

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

然后$(top_srcdir)扩展得太快,我得到AM_CPPFLAGS = -I/include in subdir/Makefile{, in}。

我不知道如何逃脱。

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

由于种种原因,这些都失败了。

请帮助。我应该如何编写AC_SUBST,以便$(top_srcdir)在到达Makefile{, in}之前不进行转义?或者我应该使用AC_SUBST以外的东西?

不要在configure.ac中设置AM_CPPFLAGS。如果你发现自己在多个Makefile.am中重复相同的序言,你应该使用非递归自动生成。

但是在这个特殊的情况下,如果你这样做了,你就可以不受惩罚了

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

因为这个字符串在bash变量中被设置为引号,然后展开为字面量。使用AC_SUBST来设置它,它被""引用,然后导致$(top_srcdir)被shell扩展。