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