C++ और Bazel

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

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

Bazel का इस्तेमाल करना

C++ प्रोजेक्ट पर Bazel का इस्तेमाल करने के लिए, इन संसाधनों का इस्तेमाल करें:

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

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

BUILD फ़ाइलें

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