2010-08-31 17 views
5

dla projektu C opartego na autotoolach, chciałbym uzyskać więcej ostrzeżeń z kompilatora (np. Przynajmniej -Wall w CFLAGS). Jaki jest preferowany sposób włączania flag kompilatora bez niszczenia czegokolwiek? Czy istnieje makro m4, które sprawdza, czy dana flaga kompilatora jest zrozumiała przez kompilator? Z takim makro mogłem zrobićAutotools: Włącz ostrzeżenia kompilatora

TEST_AND_USE(-Wall -Wextra <other flags>) 

Dzięki

Odpowiedz

4

Powszechnie używane jest makro attributes.m4 CC_CHECK_CFLAG_APPEND z projektu xine. Choć często można znaleźć warianty (ponieważ jest to dość proste) zapisywane bezpośrednio w configure.ac

2

to zrobić:

# 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 

jest to rozwiązanie low-tech, ale nie trzeba, aby pomieścić wszystkie kompilatory

+2

Jeśli nie chcesz, aby pomieścić wszystkie kompilatory, dlaczego używasz Autotools? :) – alternative

+0

@math Miałem na myśli w odniesieniu do poszczególnych flag – Anycorn

+0

dlaczego miałbyś robić kompilacje produkcyjne z wyłączonym Wall? Zawsze dodalabym -Werror też, wymusza higienę – pm100

9

Można po prostu użyć 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 Dodatek: AC_TRY_COMPILE jest teraz przestarzała, zamiast należy użyć 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

nie przeszkadza zmianę configure.ac w ogóle. Wystarczy zadzwonić ./configure z CFLAGS Ci zależy:

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

Wysoce niedoceniana odpowiedź. –

Powiązane problemy