Pregunta

Tengo un proyecto con varios directorios de fuentes:

src/A
   /B
   /C

En cada uno, el Makefile.am contiene

AM_CXXFLAGS = -fPIC -Wall -Wextra

¿Cómo puedo 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 los indicadores de compilación a nivel mundial, pero no puedo encontrar mucha documentación sobre cómo usar esas macros (¿tiene algún puntero a dicha documentación?).

Gracias de antemano

¿Fue útil?

Solución

Puedes hacer varias cosas:

(1) Una solución es incluir un fragmento de archivo MAKE común en todos sus 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 Makefile.am s simplemente editando este archivo.

(2) Otra solución sería establecer estas variables globalmente en su configure.ac (el nombre 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, ellos heredan automáticamente 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 terceros (cuando lea el Makefile.am no tienen ni idea 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 . Le aconsejaría que no lo haga, porque derrota una de las características del sistema de compilación GNU: los usuarios pueden anular esta variable en make -time. 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 los de AM_CXXFLAGS ). Para ser honesto, la mayoría de los proyectos no son compatibles con esto 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 una verificación de configuración para estos ( gnulib recientemente adquirió nuevas macros para probar indicadores de advertencia, y libtool puede usarse para construir bibliotecas compartidas) .

Otros consejos

Use EXTRA_CFLAGS en configure.ac

Por ejemplo, para su caso sería este:

EXTRA_CFLAGS = -fPIC -Wall -Wextra

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top