autotools - posible macro indefinida: AC_MSG_ERROR
autoconf (16)
¿Está configurando un directorio local '' m4
''? p.ej,
> aclocal -I m4 --install
Algunos paquetes vienen con un autogen.sh
shell autogen.sh
o initgen.sh
para ejecutar glibtoolize, autoheader, autoconf, automake. Aquí hay un script autogen.sh
que uso:
#! /bin/sh
case `uname` in Darwin*) glibtoolize --copy ;;
*) libtoolize --copy ;; esac
autoheader
aclocal -I m4 --install
autoconf
automake --foreign --add-missing --force-missing --copy
EDITAR
Es posible que deba agregar ACLOCAL_AMFLAGS = -I m4
al Makefile.am
nivel superior.
Tengo lo siguiente en 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
Esto ha estado en nuestro proyecto durante mucho tiempo, pero en algunas configuraciones, me sale este error:
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.
Las líneas que se agregaron recientemente encima de esto:
AC_CONFIG_MACRO_DIR([m4])
LT_INIT
¿Alguien puede explicar qué causa este error y cómo rastrear el problema?
EDITAR: Agregar detalles sobre las diferencias.
Caja que funciona:
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
Caja que no funciona:
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
NUEVA EDICIÓN: solo las máquinas de 32 bits experimentan esta dificultad.
ACTUALIZADO Puedo reproducir el problema en una máquina CentOS con autoconf 2.67
, automake 1.11.1
, libtool 2.2.6b
y m4 1.4.14
. ¿Es esto solo un error con las máquinas de 32 bits?
El error es generado por autom4te. Si las cosas están configuradas correctamente, la parte del código que genera ese error nunca debería ver ''AC_MSG_ERROR'', porque debería haber sido expandido por m4 antes de ese punto. Usted dice que el error solo ocurre "en algunas configuraciones". Sugeriría que en esas configuraciones, su instalación autoconf es fubar. Posiblemente tengas una versión incompatible de m4 instalada.
En Mac OS X el capitán con brew, intente:
brew install pkgconfig
Esto funcionó para mí.
Esto me sucedió cuando olvidé a, en los argumentos para una macro definida localmente. Pasé horas tratando de descubrirlo (apenas familiarizado con autotools) ...
AC_CHECK_MACRO([Foo]
AC_LOCAL_DO([......
debería haber sido
AC_CHECK_MACRO([Foo], # <-- Notice comma, doh!
AC_LOCAL_DO([......
Parece que debería haberme dado un error o algo así, pero supongo que al ser un macroprocesador solo puede hacer lo que se dice.
Hay dos posibles razones para ese problema:
no instaló aclocal.
solución: instalar libtool- Para ubuntu:
sudo apt-get install libtool
- Para centos:
sudo yum install libtool
- Para ubuntu:
el camino a LIBTOOL.m4 es un error.
solución:- use
aclocal --print-ac-dir
para verificar la ruta actual a aclocal. (Generalmente debe ser "/ usr / share / aclocal" o "/ usr / share / aclocal") - Luego verifica si hay archivos * .m4.
- Si no, cp archivos * .m4 correspondientes a esta ruta. (Tal vez
cp /usr/share/aclocal/*.m4 /usr/local/share/aclocal/
ocp /usr/local/share/aclocal/*.m4 /usr/share/aclocal/
)
- use
Espero eso ayude
He experimentado este mismo problema bajo CentOS 7
En el caso de mayo, el problema se disparó después de la instalación de libcurl-devel
( libcurl
ya estaba instalado en esta máquina)
Lo resolví por yum install libtool
Mi problema se resuelve después de instalar pkg-config en Mac (brew install pkg-config)
Para Debian. Los paquetes necesarios son: m4 automake pkg-config libtool
Se recomienda utilizar autoreconf -fi
lugar de llamar manualmente a aclocal;autoconf;automake; #and whatever else
# y aclocal;autoconf;automake; #and whatever else
para poblar apropiadamente aclocal.m4 y así sucesivamente.
Agregar ACLOCAL_AMFLAGS = -I m4
(a toplevel Makefile.am) y AC_CONFIG_MACRO_DIR([m4])
actualmente sigue siendo opcional si no usa ningún archivo m4 propio, pero por supuesto, hacerlo silenciará el proceso :)
También tuve un problema similar ... mi solución es
apt-get install libcurl4-openssl-dev
(tuve libcurl ya instalado) funcionó para mí al menos ..
Tuve el mismo problema con el puerto de Macports "openocd" (modificó localmente el archivo de puerto para usar el repositorio de git) en una máquina recién instalada.
La solución permanente es fácil, defina una dependencia de pkgconfig en el archivo de puerto: depends_lib-append port: pkgconfig
Tuve el mismo problema en Ubuntu ( error: possibly undefined macro: AC_MSG_ERROR
) pero las respuestas anteriores no me funcionaron. Encontré la solución here
Eso hizo el truco:
$ LANG=C LC_CTYPE=C ./autogen.sh
Tuve el mismo problema y descubrí que faltaba el paquete pkg-config
.
Después de instalar el paquete, todo se generó correctamente.
Tuve este problema con mi propio configure.ac
, pero en este caso (y para el beneficio de cualquier persona aquí de Google) fue porque había citado accidentalmente el AC_MSG_ERROR
por lo que estaba siendo tratado como una cadena:
AX_BOOST_BASE([1.42], [], [AC_MSG_ERROR([Could not find Boost])])
Una vez que AC_MSG_ERROR
los corchetes alrededor de la macro AC_MSG_ERROR
, funcionó:
AX_BOOST_BASE([1.42], [], AC_MSG_ERROR([Could not find Boost]))
Esos comentarios que dicen que debes instalar pkg-config
o algún paquete no tienen sentido. Se supone que AC_MSG_ERROR
funciona y le brinda un mensaje útil como "Necesita instalar el paquete XYZ", pero debido a algún problema, el AC_MSG_ERROR
no funciona. Instalar el paquete XYZ ciertamente hará que el error desaparezca, pero solo porque una vez que el paquete está allí, ya no hay necesidad de imprimir un mensaje de error.
Entonces, instalar pkg-config
o un paquete en particular simplemente elude el problema, en realidad no lo soluciona.
Usando MacOS X
sudo port install pkgconfig
fue la solución!