C++ और Bazel

समस्या की शिकायत करें स्रोत देखें

इस पेज में ऐसे संसाधन दिए गए हैं जो C++ प्रोजेक्ट के साथ, Bazel का इस्तेमाल करने में आपकी मदद करते हैं. यह Bazel के साथ C++ प्रोजेक्ट बनाने के लिए खास तौर पर ट्यूटोरियल, नियम बनाने, और अन्य जानकारी के लिंक देता है.

Bazel के साथ काम करना

नीचे दिए गए संसाधन, C++ प्रोजेक्ट पर Bazel के साथ काम करने में आपकी मदद करेंगे:

सबसे सही तरीके

Bazel के सबसे सही तरीकों के अलावा, यहां C++ प्रोजेक्ट के लिए सबसे सही तरीके बताए गए हैं.

फ़ाइलें बनाएं

BUILD फ़ाइलें बनाते समय, नीचे दिए गए दिशा-निर्देशों का पालन करें:

  • हर BUILD फ़ाइल में, डायरेक्ट्री में हर कंपाइलेशन यूनिट के लिए एक cc_library नियम का टारगेट होना चाहिए.

  • अपनी C++ लाइब्रेरी का साइज़ बढ़ाने और साथ-साथ चलने के लिए, आपको जितना हो सके ज़्यादा से ज़्यादा जानकारी देनी चाहिए.

  • अगर srcs में सिर्फ़ एक सोर्स फ़ाइल है, तो लाइब्रेरी का नाम वही रखें जो C++ फ़ाइल का है. इस लाइब्रेरी में C++ फ़ाइल(फ़ाइलें), मिलती-जुलती हेडर वाली कोई भी फ़ाइल(फ़ाइलें), और लाइब्रेरी की सीधे तौर पर निर्भरता होनी चाहिए. उदाहरण के लिए:

    cc_library(
        name = "mylib",
        srcs = ["mylib.cc"],
        hdrs = ["mylib.h"],
        deps = [":lower-level-lib"]
    )
    
  • फ़ाइल में हर cc_library टारगेट के लिए एक cc_test नियम का टारगेट इस्तेमाल करें. टारगेट [library-name]_test और सोर्स फ़ाइल को [library-name]_test.cc नाम दें. उदाहरण के लिए, ऊपर दिखाया गया mylib लाइब्रेरी टारगेट का टेस्ट टारगेट ऐसा दिखेगा:

    cc_test(
        name = "mylib_test",
        srcs = ["mylib_test.cc"],
        deps = [":mylib"]
    )
    

पाथ शामिल करें

शामिल किए गए पाथ के लिए इन दिशा-निर्देशों का पालन करें:

  • फ़ाइल फ़ोल्डर की डायरेक्ट्री से जुड़े सभी 'शामिल किए गए पाथ' बनाएं.

  • नॉन-सिस्टम हेडर के लिए कोट में शामिल (#include "foo/bar/baz.h") का इस्तेमाल करें, ऐंगल-ब्रैकेट (#include <foo/bar/baz.h>) के लिए नहीं.

  • UNIX डायरेक्ट्री के शॉर्टकट इस्तेमाल करने से बचें. जैसे, . (मौजूदा डायरेक्ट्री) या .. (पैरंट डायरेक्ट्री).

  • जो लेगसी या third_party कोड के लिए ज़रूरी है, जिसमें प्रोजेक्ट रिपॉज़िटरी के बाहर पॉइंट करना ज़रूरी हो, जैसे कि बाहरी रिपॉज़िटरी में प्रीफ़िक्स की ज़रूरत होती है, तो cc_library नियम टारगेट पर include_prefix और strip_include_prefix तर्क का इस्तेमाल करें.

टूलचेन की सुविधाएं

यहां दी गई वैकल्पिक सुविधाओं की मदद से, C++ प्रोजेक्ट को मैनेज किया जा सकता है. इन्हें --features कमांड लाइन फ़्लैग या repo package या cc_* नियमों के features एट्रिब्यूट का इस्तेमाल करके चालू किया जा सकता है:

  • parse_headers सुविधा की मदद से, C++ कंपाइलर का इस्तेमाल बिल्ट-इन टारगेट की सभी हेडर फ़ाइलों और उनकी डिपेंडेंसी को पार्स करने (लेकिन कंपाइल नहीं करने) के लिए किया जाता है. ऐसा --process_headers_in_dependencies फ़्लैग का इस्तेमाल करने पर होता है. इससे, सिर्फ़ हेडर वाली लाइब्रेरी में आने वाली समस्याओं का पता लगाया जा सकता है. साथ ही, यह पक्का किया जा सकता है कि हेडर अपने-आप पूरे होते हैं और उनके क्रम से अलग होते हैं.
  • layering_check सुविधा को लागू करके, सिर्फ़ उन हेडर को शामिल किया जाता है जो उनकी डायरेक्ट डिपेंडेंसी से मिलते हैं. डिफ़ॉल्ट टूलचेन, Linux पर इस सुविधा के साथ काम करता है. इसमें clang, कंपाइलर के तौर पर काम करता है.