2010-08-31 9 views
5

pour un projet C basé sur autotools, j'aimerais obtenir plus d'avertissements du compilateur (par exemple au moins -Wall dans CFLAGS). Quel est le moyen préféré pour activer les drapeaux du compilateur sans casser quoi que ce soit? Existe-t-il une macro m4 qui teste si un indicateur de compilation donné est compris par le compilateur? Avec une telle macro que je pouvais faireautotools: Activer les avertissements du compilateur

TEST_AND_USE(-Wall -Wextra <other flags>) 

Merci

Répondre

4

Largement utilisée est la macro attributes.m4 CC_CHECK_CFLAG_APPEND du projet xine. Bien que, vous trouvez souvent des variantes (car il est assez simple) écrit directement en configure.ac

2

-je faire ceci:

# 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 

il est une solution low-tech, mais vous ne devez pas accueillir tous les compilateurs

+2

Si vous ne voulez pas accueillir tous les compilateurs, pourquoi utilisez-vous Autotools? :) – alternative

+0

@math je voulais dire par rapport à des drapeaux particuliers – Anycorn

+0

pourquoi voulez-vous faire des compilations de production avec Wall désactivé? Je ajouterais toujours -Werror aussi, applique l'hygiène – pm100

9

Vous pouvez simplement utiliser 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 plus: AC_TRY_COMPILE est maintenant dépréciée, au lieu, vous devez utiliser 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

ne pas pris la peine de changer le configure.ac du tout. Il suffit d'appeler ./configure avec le CFLAGS que vous aimez:

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

réponse très sous-estimée. –

Questions connexes