इस पेज पर ऐसे संसाधन मौजूद हैं जिनसे आपको 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>
).यूनिक्स डायरेक्ट्री के शॉर्टकट का इस्तेमाल करने से बचें. जैसे,
.
(मौजूदा डायरेक्ट्री) या..
(पैरंट डायरेक्ट्री).लेगसी या
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
को कंपाइलर के तौर पर इस्तेमाल किया जाता है.