Bjam?

2012-05-18 10 views
6

मैं मुख्य रूप से सी ++ में लिखे गए एक परियोजना के लिए एक गैर-तुच्छ क्रॉस-प्लेटफार्म निर्माण प्रणाली को एकीकृत करना चाहता हूं। मैंने अब तक केमेक और स्कॉन्स का मूल्यांकन किया है, और जब वे दोनों (जीएनयू) में सुधार का प्रतिनिधित्व करते हैं, तो न तो दृष्टिकोण संदर्भ में सुरुचिपूर्ण या पारदर्शी लग रहा था, मैं इन उपकरणों का उपयोग करने की कोशिश कर रहा था। इससे मुझे बूस्ट बिल्ड (बीजेएएम) में लाया गया और मुझे प्रोत्साहित किया गया कि, मेरी परियोजना बूस्ट पर निर्भर है, बीजेएएम किसी भी व्यवहार्य लक्ष्य प्लेटफार्म के लिए पहले से ही उपलब्ध होना चाहिए।Bjam?

मुझे पुस्तकालय के यूनिट परीक्षणों के लिए कोड-कवरेज को अच्छी तरह से एकीकृत करने की कोशिश में कठिनाई हो रही है ... जेनकिंस जैसे निर्माण सर्वर में अंतिम एकीकरण के लिए। जब मैं Bjam सबसे अच्छा/मानक अभ्यास द्वारा निर्देशित होने की तैयार हूँ, मुझे लगता है कि मैं तीन अलग "वेरिएंट" की जरूरत है:

  • रिहाई - अनुकूलित स्थिर पुस्तकालय का निर्माण केवल
  • डिबग - गैर अनुकूलित स्थिर निर्माण करने के लिए लाइब्रेरी और यूनिट परीक्षण
  • कवरेज - कवरेज-सक्षम लाइब्रेरी बनाने और गैर-कवरेज सक्षम यूनिट परीक्षणों के साथ लिंक बनाने के लिए।

अनिवार्य रूप से, मानक डीबग और रिलीज बिल्ड के अलावा, मैं एक विशेष उद्देश्य डीबग बिल्ड करना चाहता हूं जो कवरेज डेटा भी एकत्र करता है।

मुझे (कम से कम) g ++ और msvc के साथ निर्माण करने की आवश्यकता है ... और gcov स्विच केवल g ++ के साथ उपयोग करें। इसका मतलब है कि मेरे लाइब्रेरी लक्ष्य को इकाई-परीक्षण निष्पादन योग्य लक्ष्य के लिए अलग-अलग "कंपाइलरफ्लैग" की आवश्यकता होती है ... और केवल मेरे संकलक सूट में से एक के लिए ... और केवल एक संस्करण के लिए।

मुझे अस्पष्ट नहीं है कि यह बजाम के साथ कैसे हासिल किया जाए - हालांकि, मुझे संदेह है कि यह काफी सामान्य उपयोग केस होना चाहिए। क्या बीजेएम के पास जीसीओवी कवरेज विश्लेषण के लिए स्पष्ट समर्थन है (संभवतः परिणाम एलसीओवी का उपयोग करके प्रस्तुत करना)? यदि नहीं, तो क्या कोई ऐसी रणनीति की सिफारिश कर सकता है जो उपरोक्त (सरलीकृत) परिदृश्य का समर्थन करेगा? चाहे bjam gcov के लिए स्पष्ट समर्थन हासिल है - -

उत्तर

1

मैं बहुत विश्वास है कि अपने पहले सवाल का जवाब कर रहा हूँ एक निश्चित कोई है, क्योंकि डिबग की तरह और विन्यास का निर्माण जारी, bjam पर विचार करेंगे कि एक feature variant होने के लिए उपयोगकर्ता को परिभाषित करने के लिए।

bjam के लिए, ऐसा लगता है कि वहाँ कुछ तरीके आप क्या चाहते करने के लिए कर रहे हैं:

  1. Define your own feature variant और उसके बाद किसी भी कस्टम झंडे के लिए CONFIG_COMMAND अद्यतन करें।

  2. Define/redefine a toolset

CMake के लिए, पैटर्न है कि ITK करता है निम्नलिखित पर विचार:

http://cmake.org/Wiki/ITK/Policy_and_Procedure_for_Adding_Dashboards#Configuring_GCOV_Coverage

+0

उन पॉइंटर्स के लिए धन्यवाद ...मुझे उम्मीद थी कि मुझे एक नमूना मिलेगा, कम से कम, जीसीसी/जीसीओवी के साथ ठीक से काम किया ... – aSteve

1

मैं एक ही जरूरत है और मैं मूल रूप से मेरी Jamroot फ़ाइल में अपने कवरेज संस्करण को परिभाषित करने के लिए नीचे दिए गए लाइनों गयी।

variant coverage : debug : <cxxflags>--profile-arcs <cxxflags>--test-coverage <cxxflags>--coverage <link>shared ; 
lib gcov : : <name>gcov : ; 

unit-test mytest : tests/mytest.cpp libboost_unit_test : <variant>coverage:<library>gcov ; 

जब परीक्षण चलाया जाता है कवरेज डेटा बनाई गई है और मैं इसे बाद में बाहर gcov का उपयोग कर शोषण bjam की।

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