C++ और Bazel

इस पेज में ऐसे संसाधन शामिल हैं जिनकी मदद से, 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 आर्ग्युमेंट का इस्तेमाल करें.