[autotools] 정의되지 않은 매크로 : AC_MSG_ERROR

configure.ac에 다음이 있습니다.

AC_CHECK_PROGS(MAKE,$MAKE make gmake,error)
if test "x$MAKE" = "xerror" ;then
  AC_MSG_ERROR([cannot find a make command])
fi

이것은 오랫동안 우리 프로젝트에 있었지만 일부 설정에서는 다음 오류가 발생합니다.

configure.ac:45: error: possibly undefined macro: AC_MSG_ERROR
  If this token and others are legitimate, please use m4_pattern_allow.
  See the Autoconf documentation.

이 위에 최근 추가 된 줄 :

AC_CONFIG_MACRO_DIR([m4])
LT_INIT

누구든지이 오류의 원인과 문제를 추적하는 방법을 설명 할 수 있습니까?

편집 : 차이점에 대한 세부 정보 추가.

작동하는 상자 :

uname -a Linux host1 2.6.38-13-generic #53-Ubuntu SMP Mon Nov 28 19:33:45 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

automake: 1.11.1
autoconf: 2.67
m4: 1.4.14
libtoolize: 2.2.6b

작동하지 않는 상자 :

Linux host2 2.6.32-35-generic-pae #78-Ubuntu SMP Tue Oct 11 17:01:12 UTC 2011 i686 GNU/Linux

automake: 1.11.1
autoconf: 2.65
m4: 1.4.13
libtoolize: 2.2.6b

새로운 편집 : 32 비트 머신 만이이 어려움을 경험합니다.

업데이트 내가 가진 CentOS는 컴퓨터에 문제를 재현 할 수 있어요 autoconf 2.67, automake 1.11.1, libtool 2.2.6b,와 m4 1.4.14. 32 비트 컴퓨터의 버그입니까?



답변

나는 이와 동일한 문제가 있었고 pkg-config패키지가 없다는 것을 알았 습니다.

패키지를 설치 한 후 모든 것이 올바르게 생성되었습니다.


답변

aclocal.m4 등을 올바르게 채우기 위해 autoreconf -fi수동으로 호출 하는 대신 사용 하는 것이 좋습니다 aclocal;autoconf;automake; #and whatever else.

ACLOCAL_AMFLAGS = -I m4(최상위 Makefile.am에) 추가 AC_CONFIG_MACRO_DIR([m4])하고 자신의 m4 파일을 사용하지 않는 경우 현재 여전히 선택 사항이지만 물론 그렇게하면 프로세스가 침묵합니다 🙂


답변

나는 내 자신 에이 문제가 configure.ac있었지만이 경우 (그리고 여기 Google의 누구에게나 이익을 위해) 실수로을 인용했기 때문에 AC_MSG_ERROR문자열로 취급되었습니다.

AX_BOOST_BASE([1.42], [], [AC_MSG_ERROR([Could not find Boost])])

AC_MSG_ERROR매크로 주변의 대괄호를 제거하면 다음 과 같이 작동합니다.

AX_BOOST_BASE([1.42], [], AC_MSG_ERROR([Could not find Boost]))

설치해야한다는 의견 pkg-config이나 일부 패키지에는 요점이 없습니다. 은 AC_MSG_ERROR일에 생각하고 “당신은 패키지 XYZ를 설치해야합니다”와 같은 당신에게 도움이되는 메시지를 제공하지만, 때문에 일부 문제의입니다 AC_MSG_ERROR작동하지 않습니다. 패키지 XYZ를 설치하면 확실히 오류가 사라지지만 패키지가 있으면 더 이상 오류 메시지를 인쇄 할 필요가 없기 때문입니다!

따라서 설치 pkg-config또는 특정 패키지는 문제를 우회 할뿐 실제로 문제를 해결하지는 않습니다.


답변

나는 또한 비슷한 문제가 있었다 .. 내 해결책은

apt-get install libcurl4-openssl-dev

(나는 libcurl이 모두 설치되어 있었다) 적어도 나를 위해 일했다 ..


답변

CentOS 7에서 이와 동일한 문제가 발생했습니다.

경우에 따라 libcurl-devel( libcurl이 시스템에 이미 설치되어 있음) 설치 후 문제가 발생했습니다.


답변

otto-de / libvmod-uuid를 사용하여 RHEL7.5에서 동일한 문제가 발생했습니다.

“autoconf-archive”패키지를 설치하여 수정되었습니다.


답변

로컬 ‘ m4‘디렉토리 를 설정하고 있습니까? 예 :

> aclocal -I m4 --install

일부 패키지는 glibtoolize, autoheader, autoconf, automake를 실행하기 위한 autogen.sh또는 initgen.sh쉘 스크립트 와 함께 제공됩니다 . autogen.sh내가 사용 하는 스크립트 는 다음과 같습니다 .

#! /bin/sh

case `uname` in Darwin*) glibtoolize --copy ;;
  *) libtoolize --copy ;; esac

autoheader
aclocal -I m4 --install
autoconf

automake --foreign --add-missing --force-missing --copy

편집하다

ACLOCAL_AMFLAGS = -I m4최상위 에 추가해야 할 수 있습니다 Makefile.am.