당신이하려는 일에 문제가있어서 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보고 아마, 덜 안정, 너무) YMMV은)
(이름 지정 규칙에 대한 내 의견을 유의하시기 바랍니다) 매크로를 정의하려면, 당신은 할 수 :
이
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 *
을 처리하지 못하지만, 간단하게하기 위해 병 보관이 아닌 더 일반적인 버전으로 교체 :
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 AX_ 접두어 나는 ac-archive.sourceforge.net/doc/contribute.html (마지막 단락을 참조하십시오) – Naddiseo