2014-06-10 81 views
3

我正在使用autotools來構建我的項目,並且我希望將AM_CPPFLAGS設置爲-I $(top_srcdir)/ include。如何判斷AC_SUBST是否不會在參數中替換變量?

https://stackoverflow.com/a/325436/2592351這個答案幫助了我,我正在做「包括$(top_srcdir)/ include」黑客,它的工作原理。

但是我想在這裏描述的「AC_SUBST」的方式,因爲它看起來更乾淨。問題是,當我加入這個我configure.ac:

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

然後$(top_srcdir)過於膨脹很快,我得到AM_CPPFLAGS = -I /包括子目錄/ Makefile文件{中}。

而我不知道如何逃避它。

[email protected][email protected]/include 
-I\$(top_srcdir)/include 
-I$$(top_srcdir)/include 

所有這些因各種原因失敗。

請幫忙。我應該如何編寫AC_SUBST,以便$(top_srcdir)在轉換成Makefile {,.in}之前未被轉義?或者,也許我應該使用AC_SUBST以外的東西?

+1

根本沒有測試,但嘗試'[-I @ S | @@ {:@ top_srcdir @:} @/include]''。 https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Quadrigraphs.html#Quadrigraphs – zwol

+0

謝謝@Zack,但它也被過早取代。 –

+0

Drat。你可以發佈'grep AM_CPPFLAGS config.status configure'的輸出嗎(當然是在運行configure之後)? – zwol

回答

1

請勿在您的configure.ac中設置AM_CPPFLAGS。如果您發現自己在多個Makefile.am中重複相同的前導碼,則應該使用non-recursive automake

但是,在這種特殊情況下,你應該擺脫它,如果你做

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

因爲這時字符串設置在bash的變量引用,後來擴展爲文字。使用AC_SUBST進行設置,它會被""引用,然後導致$(top_srcdir)被shell擴展。

+0

AC_SUBSTing AM_CPPFLAGS可以。在調用AC_SUBST時簡單添加單引號也是可行的:'AC_SUBST([AM_CPPFLAGS],[' - I $(top_srcdir)/ include'])' –

相關問題