2012-06-02 17 views
5
  1. यह इसके अलावा (Makefile आय से पहले और इस तरह से बाहर निकलें) एक Makfile में त्रुटियों के रूप में चेतावनी के इलाज के लिएमेकफ़ाइल में किसी त्रुटि के रूप में चेतावनी का इलाज कैसे करें?

  2. संभव है, यह पता फिल्टर करने के लिए जो चेतावनी एक त्रुटि पैदावार संभव है?

मेरे उपयोग के मामले: मैं इस के साथ संयोजन में --warn-undefined-variables उपयोग करने के लिए इतना है कि Makefile बाहर निकल जाएगा जब एक चर अपरिभाषित है, त्रुटि के एक बहुत ही आम स्रोत है जो चाहते हैं। जाहिर है, मैं प्रत्येक चर के लिए मैन्युअल रूप से जांच नहीं करना चाहता क्योंकि यह त्रुटि-प्रवण/थकाऊ है। मुझे इस पर कुछ भी नहीं मिला, लेकिन यह एक बहुत ही महत्वपूर्ण/मूलभूत विशेषता है।

नोट: मैं -Werror की तलाश नहीं कर रहा हूं जो एक जीसीसी विशिष्ट आदेश है जो मेरे उपयोग के मामले पर लागू नहीं है।

+1

स्टैक ओवरव्लो में आपका स्वागत है। यहां डिज़ाइन "प्रति प्रश्न एक प्रश्न" है, इसलिए एक स्पष्ट उत्तर हो सकता है। एकाधिक प्रश्नों का अर्थ है कि एक से अधिक उत्तरों सही हो सकते हैं (मैं प्रश्न 1 का उत्तर देता हूं, कोई और प्रश्न 2 का उत्तर देता है), और स्वीकार किए गए एक के रूप में एक ही जवाब चुनना असंभव है। कृपया [एफएक्यू] (http://stackoverflow.com/faq) की समीक्षा करें ताकि आप एसओ कैसे काम कर सकें। धन्यवाद। –

+2

यह मेरे लिए एक उचित सवाल की तरह लगता है। अफसोस की बात है, मुझे संदेह है कि जवाब 1) नहीं, 2) म्यूट, और 3) कठिन है। – Beta

+0

यह निर्भर करता है कि आप 'अपरिभाषित चर' से क्या मतलब रखते हैं, लेकिन कोई मान ('VAR =') वाले वेरिएबल काफी महत्वपूर्ण हो सकते हैं (कुछ भी त्रुटि हो सकती है)। मैं अक्सर अप्रयुक्त चर भर में आते हैं; यह एक परिभाषा है जो एक बार (अनुमानतः) मेकफ़ाइल में उपयोग की जाती थी लेकिन अब और नहीं है। –

उत्तर

2

मेक का मानक संस्करण जो आप ढूंढ रहे हैं उसका समर्थन नहीं करता है। हालांकि, अपने उपयोग के मामले को पूरा करने के लिए अपना खुद का संस्करण बनाना मुश्किल नहीं होना चाहिए।

3.82 बनाने के स्रोत कोड को देखते हुए, बाहर की जाँच मैक्रो warn_undefined variable.h में:

214 /* Warn that NAME is an undefined variable. */ 
215 
216 #define warn_undefined(n,l) do{\ 
217        if (warn_undefined_variables_flag) \ 
218         error (reading_file, \ 
219          _("warning: undefined variable `%.*s'"), \ 
220         (int)(l), (n)); \ 
221        }while(0) 

मैं इस प्रयास नहीं किया है, लेकिन मुझे लगता है कि यह fatal साथ error को बदलने के लिए पर्याप्त होना चाहिए।

3

यदि आप प्रत्येक लक्ष्य पर निर्भरता जोड़ने के लिए तैयार हैं, तो आप त्रुटियों में चेतावनियां कर सकते हैं।

$ make 
! make -n all 2>&1 >/dev/null | grep warning 
Makefile:17: warning: undefined variable `SRCS' 
make: *** [no-make-warnings] Error 1 

तुम बस:

# Turn on the warning we want 
MAKEFLAGS += --warn-undefined-variables 

# Make sure MAKECMDGOALS is defined, so it doesn't cause an error itself 
ifndef MAKECMDGOALS 
MAKECMDGOALS = all 
endif 

SRC=hello.c 

all: compile 

# Fails if the Makefile contains any warnings. 
# Run this Makefile with the same goals, but with the -n flag. 
# Grep for warnings, and fail if any are found. 
no-make-warnings: 
    ! make -n $(MAKECMDGOALS) 2>&1 >/dev/null | grep warning 

# Targets you want to check must depend on no-make-warnings 
compile: no-make-warnings 
    gcc -o hello $(SRCS) 

जब मैंने इसे चलाने के लिए, मैं इस देखें:

यहाँ यह करने में कोई त्रुटि के साथ एक मेकअप फ़ाइल (बदले "एसआरसी" "SRCS") है आप जिस लक्ष्य को चेक करना चाहते हैं उसे बनाने की आवश्यकता no-make-warnings पर निर्भर करती है।

अगर कोई जानता है कि स्वचालित रूप से इसे कैसे किया जाए, तो कृपया

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