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