2010-08-31 10 views
5

सक्षम करें, मैं कंपाइलर से कुछ और चेतावनियां प्राप्त करना चाहता हूं (उदा। कम से कम- CFFAGS में)। कुछ तोड़ने के बिना कंपाइलर झंडे को सक्षम करने का पसंदीदा तरीका क्या है? क्या कोई एम 4 मैक्रो है जो परीक्षण करता है अगर किसी दिए गए कंपाइलर ध्वज को संकलक द्वारा समझा जाता है? जैसे मेक्रो के साथ मैं कर सकताautotools: एक ऑटोोटूल-आधारित सी प्रोजेक्ट के लिए कंपाइलर चेतावनियां

TEST_AND_USE(-Wall -Wextra <other flags>) 

धन्यवाद

उत्तर

4

व्यापक रूप से attributes.m4 xine प्रोजेक्ट से CC_CHECK_CFLAG_APPEND मैक्रो का उपयोग किया जाता है। हालांकि, आप अक्सर वेरिएंट को खोजने (क्योंकि यह काफी सरल है) configure.ac में प्रत्यक्ष रूप से लिखा

2

मैं क्या यह:

# 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 

यह एक कम तकनीकी समाधान है, लेकिन आप सभी compilers को समायोजित करने की जरूरत नहीं है

+2

आप सभी compilers समायोजित करने के लिए नहीं करना चाहते हैं, तुम क्यों Autotools का उपयोग कर रहे: बस CFLAGS आप ध्यान के साथ ./configure कहते हैं? :) – alternative

+0

@ माथ मैं विशेष झंडे के संबंध में था – Anycorn

+0

वॉल वॉल के साथ आप उत्पादन संकलन क्यों करेंगे? मैं हमेशा जोड़ता हूं- आतंक भी, – pm100

9

तुम बस 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 इसके अलावा: AC_TRY_COMPILE अब हटाई गई है, इसके बजाय आप का उपयोग करना चाहिए 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

बिल्कुल configure.ac बदलते परेशान न हों।

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

अत्यधिक अंतर्निहित उत्तर। –

संबंधित मुद्दे