2010-08-31 15 views
5

per un progetto C basato su autotools, vorrei ricevere ulteriori avvisi dal compilatore (ad esempio almeno -Wall in CFLAGS). Qual è il modo preferito per abilitare le bandiere del compilatore senza rompere nulla? Esiste una macro m4 che verifica se un determinato compilatore è compreso dal compilatore? Con una tale macro potevo fareautotools: abilita gli avvisi del compilatore

TEST_AND_USE(-Wall -Wextra <other flags>) 

Grazie

risposta

4

Ampiamente utilizzata è la macro attributes.m4 CC_CHECK_CFLAG_APPEND dal progetto xine. Anche se, si trovano spesso varianti (dal momento che è abbastanza semplice) scritto direttamente in configure.ac

2

mi fare questo:

# 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 

è una soluzione low-tech, ma non c'è bisogno di accogliere tutti i compilatori

+2

Se non si desidera accogliere tutti i compilatori, perché stai usando Autotools? :) – alternative

+0

@math intendevo rispetto a particolari flag – Anycorn

+0

perché dovresti compilare la produzione con Wall disattivato? Aggiungerò sempre anche Worror, applica l'igiene – pm100

9

Si può semplicemente utilizzare 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 inoltre: AC_TRY_COMPILE è ormai deprecato, invece si dovrebbe usare 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

non preoccupatevi cambiando la configure.ac a tutti. Basta chiamare ./configure con la CFLAGS che ti interessano:

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

risposta molto sottovalutato. –

Problemi correlati