इस पेज में ऐसे संसाधन शामिल हैं जिनकी मदद से, C++ प्रोजेक्ट के साथ Bazel का इस्तेमाल किया जा सकता है. इसमें एक ट्यूटोरियल, बिल्ड के नियम, और Bazel की मदद से C++ प्रोजेक्ट बनाने से जुड़ी अन्य जानकारी शामिल है.
Bazel का इस्तेमाल करना
C++ प्रोजेक्ट पर Bazel का इस्तेमाल करने के लिए, इन संसाधनों की मदद लें:
- ट्यूटोरियल: C++ प्रोजेक्ट बनाना
- C++ के सामान्य इस्तेमाल के उदाहरण
- C/C++ के नियम
- ज़रूरी लाइब्रेरी
- C++ टूलचेन का कॉन्फ़िगरेशन
- ट्यूटोरियल: C++ टूलचेन कॉन्फ़िगर करना
- C++ के नियमों के साथ इंटिग्रेट करना
सबसे सही तरीके
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कोड के लिए, ऐसे पाथ शामिल करें जो प्रोजेक्ट रिपॉज़िटरी से बाहर की ओर पॉइंट करते हैं. जैसे, बाहरी रिपॉज़िटरी में शामिल किए गए पाथ के लिए, प्रीफ़िक्स की ज़रूरत होती है. इसके लिए,include_prefixऔरstrip_include_prefixआर्ग्युमेंट का इस्तेमालcc_libraryनियम टारगेट पर करें.
टूलचेन की सुविधाएं
यहां दी गई वैकल्पिक सुविधाओं
की मदद से, C++ प्रोजेक्ट को बेहतर बनाया जा सकता है. इन्हें
--features कमांड-लाइन फ़्लैग या features एट्रिब्यूट का इस्तेमाल करके चालू किया जा सकता है:
repo,
package या cc_* नियमों के:
parse_headersसुविधा की मदद से, C++ कंपाइलर का इस्तेमाल करके, बनाए गए टारगेट और उनकी डिपेंडेंसी में मौजूद सभी हेडर फ़ाइलों को पार्स किया जा सकता है. हालांकि,--process_headers_in_dependenciesफ़्लैग का इस्तेमाल करने पर, इन्हें कंपाइल नहीं किया जाता. इससे, सिर्फ़ हेडर वाली लाइब्रेरी में मौजूद समस्याओं को पकड़ा जा सकता है. साथ ही, यह पक्का किया जा सकता है कि हेडर, सेल्फ-कंटेन्ड हों और वे इस बात पर निर्भर न हों कि उन्हें किस क्रम में शामिल किया गया है.layering_checkसुविधा की मदद से, यह पक्का किया जाता है कि टारगेट में सिर्फ़ वे हेडर शामिल हों जो उनकी डायरेक्ट डिपेंडेंसी से मिले हैं. डिफ़ॉल्ट टूलचेन, Linux पर इस सुविधा के साथ काम करता है. इसमें कंपाइलर के तौर परclangका इस्तेमाल किया जाता है.