c++ autotools autoconf flags automake

c++ - Autotools: cómo establecer la bandera de compilación global



autoconf flags (2)

Use EXTRA_CFLAGS en configure.ac

Por ejemplo para su caso sería este:

EXTRA_CFLAGS=-fPIC -Wall -Wextra

Tengo un proyecto con varios directorios de fuentes:

src/A /B /C

En cada uno, el archivo Makefile.am contiene

AM_CXXFLAGS = -fPIC -Wall -Wextra

¿Cómo se puede evitar repetir esto en cada carpeta de origen?

Intenté modificar src / Makefile.am y configure.in, pero sin éxito. Pensé que podría usar AC_PROG_CXX para establecer las banderas de compilación globalmente pero no puedo encontrar mucha documentación sobre cómo usar esas macro (¿tiene algún puntero a dicha documentación?).

Gracias por adelantado


Puedes hacer varias cosas:

(1) Una solución es incluir un fragmento común de archivo MAKE en todos tus Makefile.am s:

include $(top_srcdir)/common.mk ... bin_PROGRAMS = foo foo_SOURCES = ...

en ese caso escribirías

AM_CXXFLAGS = -fpic -Wall -Wextra

a common.mk y en el futuro será más fácil agregar más macros o reglas a todos los archivos Makefile.am editando este archivo.

(2) Otra solución sería establecer estas variables globalmente en su configure.ac (el nombre de configure.in ha quedado en desuso hace mucho tiempo), como en:

... AC_SUBST([AM_CXXFLAGS], [-fpic -Wall -Wextra]) ...

Entonces ni siquiera tiene que decir nada en sus Makefile.am s, automáticamente heredan esta definición global. El inconveniente es que no puede darse de baja fácilmente (con la primera solución es fácil decidir no incluir common.mk ) y la dependencia no es realmente explícita para terceras personas (cuando leen el Makefile.am que tienen). no hay indicios acerca de dónde pueden venir las banderas).

(3) Una tercera solución sería hacer lo que orsogufo sugirió: sobrescribir la variable de usuario CXXFLAGS en configure.ac . Aconsejaría que no lo make , porque anula una de las características del Sistema de compilación de GNU: los usuarios pueden anular esta variable en tiempo real. Por ejemplo, es posible que desee escribir

make CXXFLAGS=''-O0 -ggdb''

al depurar un fragmento de código, y esto sobrescribirá cualquier definición de CXXFLAGS (pero no las de AM_CXXFLAGS ). Para ser honesto, la mayoría de los proyectos no lo admiten correctamente porque juegan trucos con CXXFLAGS .

Finalmente, debo mencionar que -fpic , -Wall y -Werror no son opciones portátiles. Dependiendo del alcance de su proyecto, es posible que desee agregar la comprobación de configuración para estos ( gnulib adquirió nuevas macros recientemente para pruebas de indicadores de advertencias, y libtool se puede usar para compilar bibliotecas compartidas).