你試圖做的事情的麻煩是AC_CHECK_SIZEOF
實際上並沒有定義一個名爲SIZEOF_INT
的變量。在2.68中,所需的變量名稱爲ac_cv_sizeof_int
,但不應使用該名稱,因爲名稱在更高版本中可能會更改。值也被寫進confdefs.h,所以另一種方式來抓住它是:
AC_PROG_AWK
AC_CHECK_SIZEOF([int])
SIZEOF_INT=$($AWK '/SIZEOF_INT/{print $3}' confdefs.h)
AC_SUBST([SIZEOF_INT])
(讀confdefs.h也是無證行爲,並在主題的autoconf未來版本中改變,但可能比更穩定。看着$ ac_cv_sizeof_int可能,不太穩定,太;)情況因人而異)
要定義的宏(請注意我的關於命名約定註釋),你可以這樣做:
AC_DEFUN([wrp_CHECK_SIZEOF_AND_SUBST], [
AC_REQUIRE([AC_PROG_AWK])
AC_CHECK_SIZEOF([$1])
m4_toupper(SIZEOF_$1)=$($AWK '
/SIZEOF_[]m4_toupper($1)/{print $[]3}' confdefs.h)
AC_SUBST(m4_toupper(SIZEOF_$1))
])
版本以上不不處理int *
,但爲了簡單起見,我w虐待它保留下來,而不是更一般的版本來替換它:
AC_DEFUN([wrp_CHECK_SIZEOF_AND_SUBST], [
AC_REQUIRE([AC_PROG_AWK])
AC_CHECK_SIZEOF([$1])
m4_pushdef([name],SIZEOF_[]m4_toupper(m4_translit($1,[ *],[_p])))
name=$($AWK '/name/{print $[]3}' confdefs.h)
AC_SUBST(name)
m4_popdef([name])
])
注:我相信$()
符號應在便攜的配置腳本來避免,並應與反引號替換。但是,我發現反襯可怕。
請閱讀http://www.gnu.org/software/autoconf/manual/autoconf-2.67/html_node/Macro-Names.html的第3段。雖然我相信「AX_」不會與任何保留的名稱空間發生衝突,但建議避免使用該名稱。 –
@WilliamPursell我根據ac-archive.sourceforge.net/doc/contribute.html的建議得到了AX_前綴(請參見最後一段) – Naddiseo