2010-08-31 30 views
5

para un proyecto C basado en autotools, me gustaría obtener algunas advertencias adicionales del compilador (por ejemplo, al menos -Wall en CFLAGS). ¿Cuál es la forma preferida de habilitar las banderas del compilador sin romper nada? ¿Hay una macro m4 que pruebe si el compilador entiende una bandera de compilador determinada? Con una macro tal que podía hacerautotools: habilitar las advertencias del compilador

TEST_AND_USE(-Wall -Wextra <other flags>) 

Gracias

Respuesta

4

Ampliamente utilizado es la macro attributes.m4 CC_CHECK_CFLAG_APPEND del proyecto xine. Aunque, a menudo se encuentran variantes (ya que es bastante simple) escrita directamente en configure.ac

2

Puedo hacer esto:

# debug compilation 
AC_ARG_ENABLE(debug, 
    AC_HELP_STRING(--enable-debug, [Debug compilation (Default = no)]), 
    enable_debug=$enableval, enable_debug=no) 

if test "$enable_debug" = "yes" ; then 
    CFLAGS="$CFLAGS -g -O0 -Wall -Wno-uninitialized" 
    CXXFLAGS="$CXXFLAGS -g -O0 -Wall -Wno-uninitialized" 
fi 

es una solución de baja tecnología, pero usted no tiene que dar cabida a todos los compiladores

+2

Si usted no quiere dar cabida a todos los compiladores, ¿Por qué utiliza Autotools? :) – alternative

+0

@math Quise decir con respecto a las banderas particulares – Anycorn

+0

¿por qué harías las compilaciones de producción con Wall apagado? Siempre agregaría -Werror también, exige higiene – pm100

9

sólo puede utilizar AC_TRY_COMPILE:

AC_MSG_CHECKING(whether compiler understands -Wall) 
old_CFLAGS="$CFLAGS" 
CFLAGS="$CFLAGS -Wall" 
AC_TRY_COMPILE([],[], 
    AC_MSG_RESULT(yes), 
    AC_MSG_RESULT(no) 
    CFLAGS="$old_CFLAGS") 

2015 Además: AC_TRY_COMPILE ahora es obsoleto, en su lugar debe usar AC_COMPILE_IFELSE:

AC_MSG_CHECKING(whether compiler understands -Wall) 
old_CFLAGS="$CFLAGS" 
CFLAGS="$CFLAGS -Wall" 
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])], 
    AC_MSG_RESULT(yes), 
    AC_MSG_RESULT(no) 
    CFLAGS="$old_CFLAGS") 
7

no se moleste cambiar el configure.ac en absoluto. Sólo tiene que llamar ./configure con el CFLAGS se preocupan por:

./configure CFLAGS='-Wall -Wextra -O2 -g' 
+0

respuesta muy infravalorada. –

Cuestiones relacionadas