2012-08-13 13 views
6

मैं कुछ परीक्षण कोड कवरेज के लिए एक सी परियोजना और gcov बनाने के लिए वेफ का उपयोग कर रहा हूं।वफ़ को ऑब्जेक्ट फ़ाइलों का नाम बदलने से कैसे रोकें?

$ gcov foo.c 
$ foo.gcno:cannot open graph file 

सौभाग्य से, gcov जिसके साथ यह संभव है -o विकल्प इसी वस्तु फ़ाइल निर्दिष्ट करने के लिए है: हालांकि, waf एक तरीका है कि स्रोत फ़ाइल foo.c कि gcov confuses जब उत्पन्न फ़ाइलों के लिए खोज से foo.c.1.o का उत्पादन में gcc कॉल । फिर भी, यह सुविधाजनक नहीं है और lcov निष्पादित अभी भी विफल रहता है। इसलिए, मेरे प्रश्न हैं:

  1. वाफ ऑब्जेक्ट फ़ाइलों का नाम क्यों बदलता है?
  2. यह व्यवहार कैसे अक्षम किया जा सकता है या ...
  3. gcov/lcov इस समस्या के आसपास कैसे काम कर सकता है?

उत्तर

6

कुछ के साथ waf के विन्यास को संशोधित करने की कोशिश की आप सीधे gcov चल के बजाय gcovr का उपयोग कर सकते है।

gcovr फ़ाइल नाम जादू पर भरोसा नहीं करता है, लेकिन gcov की कवरेज फाइलों पर पार्स करता है।
यह उचित पैरामीटर के साथ gcov पर कॉल करता है।
यह वाफ की ऑब्जेक्ट फ़ाइल नामकरण के साथ बहुत अच्छा काम करता है।

आप waf के build उपनिर्देशिका से gcovr चला सकते हैं:

cd build 
gcovr --root=$(pwd) --keep 
lcov --capture --directory $(pwd) --base-directory $(pwd) --output-file coverage.info 
genhtml coverage.info --output-directory out 

--root विकल्प वर्तमान निर्देशिका उपसर्ग
--keep विकल्प gcov के अस्थायी फ़ाइलें, lcov/genhtml द्वारा प्रयोग किया जाता रहता है निकालता है।

आप के --xml विकल्प Cobertura-संगत xml आउटपुट का उत्पादन करने के लिए भी उपयोग कर सकते हैं।
यह तो, विभिन्न formatters (मैं जेनकींस के साथ 'Cobertura Plugin इसका इस्तेमाल) द्वारा इस्तेमाल किया जा सकता

+0

स्पष्ट उत्तर के बावजूद काम करना वास्तव में मुश्किल था। स्पष्ट रूप से gcovr के मास्टर संशोधन में एक बग है जो इसे सूची में एक अलग पथ के रूप में --root तर्क के प्रत्येक वर्ण को पढ़ने का कारण बनता है। इसलिए दिया गया है कि $ (pwd) '/' से शुरू होता है, यह आपके संपूर्ण फाइल सिस्टम को .gcno फ़ाइलों और hangs के लिए खोजकर शुरू होता है। मैंने लाइन 1828 को बदल दिया जहां यह get_datafiles को "[options.root]" पास करने के लिए कॉल करता है और इसे काम करने के लिए मिला। – flodin

+0

@flodin "[options.root]" बग gcovr 3.2 में तय किया गया है। –

0

आप की तरह

bld.program(
    obj_ext = '.o', 
    source = 'test.c', 
    target = 'test1') 
+3

वैसे भी waf के F.A.Q से: 'क्यू: क्यों foo.cpp के संकलन foo.cpp करता है। .o जहां कुछ संख्या है? ए: अन्यथा एक ही फाइल को विभिन्न संदर्भों में संकलित किया जा सकता है और ' – Eregrith

+0

ओवरराइट किया गया है दुर्भाग्य से,' obj_ext' जोड़ने से मदद नहीं मिलती है। लेकिन एफएक्यू से असंतोषजनक स्पष्टीकरण के लिए मुझे इंगित करने के लिए धन्यवाद (मुझे आश्चर्य है कि उन्होंने वाफ बुक में इस महत्वपूर्ण जानकारी को क्यों शामिल नहीं किया)। – matthias

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

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