BazelCon 2022 16-17 নভেম্বর নিউ ইয়র্ক এবং অনলাইনে আসছে।
নিবন্ধন আজ!

C/C++ নিয়ম

সেভ করা পৃষ্ঠা গুছিয়ে রাখতে 'সংগ্রহ' ব্যবহার করুন আপনার পছন্দ অনুযায়ী কন্টেন্ট সেভ করুন ও সঠিক বিভাগে রাখুন।

নিয়ম

cc_binary

cc_binary(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, copts, defines, deprecation, distribs, env, exec_compatible_with, exec_properties, features, includes, licenses, linkopts, linkshared, linkstatic, local_defines, malloc, nocopts, output_licenses, restricted_to, stamp, tags, target_compatible_with, testonly, toolchains, visibility, win_def_file)

অন্তর্নিহিত আউটপুট লক্ষ্য

  • name .stripped (যদি স্পষ্টভাবে অনুরোধ করা হয় শুধুমাত্র নির্মিত): বাইনারি একটি ছিনতাই সংস্করণ. strip -g ডিবাগ চিহ্ন মুছে ফেলার জন্য বাইনারিতে চালানো হয়। --stripopt=-foo ব্যবহার করে কমান্ড লাইনে অতিরিক্ত স্ট্রিপ অপশন প্রদান করা যেতে পারে। এই আউটপুট শুধুমাত্র যদি স্পষ্টভাবে অনুরোধ করা হয় নির্মিত হয়.
  • name .dwp (যদি স্পষ্টভাবে অনুরোধ করা হয় তবেই নির্মিত): যদি ফিশন সক্রিয় করা হয়: দূরবর্তীভাবে স্থাপন করা বাইনারি ডিবাগ করার জন্য উপযুক্ত একটি ডিবাগ তথ্য প্যাকেজ ফাইল। অন্য: একটি খালি ফাইল।

যুক্তি

গুণাবলী
name

Name ; required

এই লক্ষ্যের জন্য একটি অনন্য নাম।

deps

List of labels ; optional

বাইনারি টার্গেটের সাথে লিঙ্ক করা অন্যান্য লাইব্রেরির তালিকা।

এগুলি cc_library বা objc_library টার্গেট হতে পারে।

srcs

List of labels ; optional

লক্ষ্য তৈরি করতে প্রক্রিয়া করা C এবং C++ ফাইলগুলির তালিকা। এগুলো হল C/C++ সোর্স এবং হেডার ফাইল, হয় নন-জেনারেটেড (সাধারণ সোর্স কোড) বা জেনারেট করা।

সমস্ত .cc , .c , এবং .cpp ফাইল কম্পাইল করা হবে৷ এই ফাইলগুলি তৈরি হতে পারে: যদি একটি outs ফাইল অন্য কোনও নিয়মের বাইরে থাকে তবে এই নিয়মটি স্বয়ংক্রিয়ভাবে সেই অন্য নিয়মের উপর নির্ভর করবে।

A .h ফাইল কম্পাইল করা হবে না, কিন্তু এই নিয়মের সূত্রে অন্তর্ভুক্ত করার জন্য উপলব্ধ হবে। .cc এবং .h ফাইল উভয়ই সরাসরি এই srcs বা deps আর্গুমেন্টে তালিকাভুক্ত যেকোনো নিয়মের hdrs এ তালিকাভুক্ত শিরোনাম অন্তর্ভুক্ত করতে পারে।

সমস্ত #include d ফাইল এই নিয়মের hdrs অ্যাট্রিবিউটে অথবা রেফারেন্স cc_library() s-এর srcs অ্যাট্রিবিউটে উল্লেখ করতে হবে। প্রস্তাবিত শৈলী হল একটি লাইব্রেরির সাথে যুক্ত হেডারগুলিকে সেই লাইব্রেরির hdrs অ্যাট্রিবিউটে তালিকাভুক্ত করার জন্য এবং এই নিয়মের উত্সগুলির সাথে যুক্ত যেকোন অবশিষ্ট শিরোনামগুলিকে srcs এ তালিকাভুক্ত করার জন্য। আরও বিশদ বিবরণের জন্য "শিরোনাম অন্তর্ভুক্তি পরীক্ষা" দেখুন।

যদি একটি নিয়মের নাম srcs এ থাকে, তাহলে এই নিয়মটি স্বয়ংক্রিয়ভাবে সেইটির উপর নির্ভর করে। যদি নামকৃত নিয়মের outs C বা C++ সোর্স ফাইল হয়, তবে সেগুলি এই নিয়মে সংকলিত হয়; যদি সেগুলি লাইব্রেরি ফাইল হয়, তাহলে সেগুলি লিঙ্ক করা আছে।

অনুমোদিত srcs ফাইল প্রকার:

  • C এবং C++ সোর্স ফাইল: .c , .cc , .cpp , .cxx , .c++ , .C
  • C এবং C++ হেডার ফাইল: .h , .hh , .hpp , .hxx , .inc , .inl , .H
  • সি প্রিপ্রসেসর সহ অ্যাসেম্বলার: .S
  • সংরক্ষণাগার: .a , .pic.a
  • লাইব্রেরি "সর্বদা লিঙ্ক করুন": .lo , .pic.lo
  • শেয়ার্ড লাইব্রেরি, ভার্সনড বা আনভার্সনড: .so , .so. version
  • অবজেক্ট ফাইল: .pic.o , .o

...এবং সেই ফাইলগুলি তৈরি করে এমন কোনো নিয়ম। বিভিন্ন এক্সটেনশন জিসিসি কনভেনশন অনুযায়ী বিভিন্ন প্রোগ্রামিং ভাষাকে নির্দেশ করে।

additional_linker_inputs

List of labels ; optional

এই ফাইলগুলিকে C++ লিঙ্কার কমান্ডে পাঠান।

উদাহরণস্বরূপ, সংকলিত Windows .res ফাইলগুলি এখানে বাইনারি টার্গেটে এম্বেড করার জন্য দেওয়া যেতে পারে।

copts

List of strings; optional

C++ কম্পাইলেশন কমান্ডে এই বিকল্পগুলি যোগ করুন। "ভেরিয়েবল তৈরি করুন" প্রতিস্থাপন এবং বোর্ন শেল টোকেনাইজেশন সাপেক্ষে।

বাইনারি টার্গেট কম্পাইল করার আগে এই অ্যাট্রিবিউটের প্রতিটি স্ট্রিং COPTS এ প্রদত্ত ক্রমে যোগ করা হয়। ফ্ল্যাগগুলি শুধুমাত্র এই টার্গেট কম্পাইল করার জন্য কার্যকর হয়, এর নির্ভরতা নয়, তাই অন্য কোথাও অন্তর্ভুক্ত হেডার ফাইলগুলির বিষয়ে সতর্ক থাকুন। সমস্ত পাথ কর্মক্ষেত্রের সাথে সম্পর্কিত হওয়া উচিত, বর্তমান প্যাকেজের সাথে নয়।

যদি প্যাকেজটি no_copts_tokenization বৈশিষ্ট্যটি ঘোষণা করে, Bourne শেল টোকেনাইজেশন শুধুমাত্র একটি "মেক" ভেরিয়েবল নিয়ে গঠিত স্ট্রিংগুলিতে প্রযোজ্য।

defines

List of strings; optional

কম্পাইল লাইন যোগ করার জন্য সংজ্ঞায়িত তালিকা. "মেক" পরিবর্তনশীল প্রতিস্থাপন এবং বোর্ন শেল টোকেনাইজেশন সাপেক্ষে। প্রতিটি স্ট্রিং, যা অবশ্যই একটি একক Bourne শেল টোকেন নিয়ে গঠিত, -D এর সাথে পূর্বে যুক্ত করা হয় এবং এই লক্ষ্যে কম্পাইল কমান্ড লাইনে যোগ করা হয়, সেইসাথে এটির উপর নির্ভর করে এমন প্রতিটি নিয়মে। খুব সতর্ক থাকুন, কারণ এর সুদূরপ্রসারী প্রভাব থাকতে পারে। সন্দেহ হলে, পরিবর্তে local_defines এ define মান যোগ করুন।
includes

List of strings; optional

কম্পাইল লাইনে যুক্ত করার জন্য অন্তর্ভুক্ত ডিরগুলির তালিকা।

"ভেরিয়েবল তৈরি করুন" প্রতিস্থাপনের বিষয়। প্রতিটি স্ট্রিং -isystem-এর সাথে পূর্বে লেখা হয় এবং -isystem এ যোগ করা COPTSCOPTS এর বিপরীতে, এই পতাকাগুলি এই নিয়মের জন্য এবং এর উপর নির্ভর করে এমন প্রতিটি নিয়মের জন্য যোগ করা হয়েছে। (দ্রষ্টব্য: এটি যে নিয়মের উপর নির্ভর করে তা নয়!) খুব সতর্ক থাকুন, কারণ এটি সুদূরপ্রসারী প্রভাব ফেলতে পারে। সন্দেহ হলে, পরিবর্তে COPTS- এ "-I" পতাকা যোগ করুন।

হেডারগুলি অবশ্যই srcs বা hdrs-এ যোগ করতে হবে, অন্যথায় যখন সংকলন স্যান্ডবক্স করা হয় তখন সেগুলি নির্ভরশীল নিয়মগুলিতে উপলব্ধ হবে না (ডিফল্ট)।

linkopts

List of strings; optional

C++ লিঙ্কার কমান্ডে এই পতাকা যোগ করুন। "মেক" পরিবর্তনশীল প্রতিস্থাপন, বোর্ন শেল টোকেনাইজেশন এবং লেবেল সম্প্রসারণ সাপেক্ষে। বাইনারি টার্গেট লিঙ্ক করার আগে এই অ্যাট্রিবিউটের প্রতিটি স্ট্রিং LINKOPTS এ যোগ করা হয়।

এই তালিকার প্রতিটি উপাদান যা $ বা - দিয়ে শুরু হয় না তা deps এ একটি লক্ষ্যের লেবেল বলে ধরে নেওয়া হয়। সেই লক্ষ্য দ্বারা উত্পন্ন ফাইলগুলির তালিকা লিঙ্কার বিকল্পগুলিতে যুক্ত করা হয়েছে। একটি ত্রুটি রিপোর্ট করা হয় যদি লেবেলটি অবৈধ হয়, বা deps -এ ঘোষণা না করা হয়।

linkshared

Boolean; optional; nonconfigurable ; default is False

একটি শেয়ার্ড লাইব্রেরি তৈরি করুন। এই বৈশিষ্ট্যটি সক্ষম করতে, আপনার নিয়মে linkshared=True অন্তর্ভুক্ত করুন। ডিফল্টরূপে এই বিকল্পটি বন্ধ।

এই পতাকার উপস্থিতির মানে হল যে gcc করা পতাকার সাথে -shared এর সাথে লিঙ্ক করা হয়, এবং ফলস্বরূপ শেয়ার করা লাইব্রেরিটি জাভা প্রোগ্রামে লোড করার জন্য উপযুক্ত। যাইহোক, নির্মাণের উদ্দেশ্যে এটি কখনই নির্ভরশীল বাইনারির সাথে সংযুক্ত করা হবে না, কারণ এটি অনুমান করা হয় যে একটি cc_binary নিয়মের সাথে নির্মিত শেয়ার্ড লাইব্রেরিগুলি শুধুমাত্র অন্যান্য প্রোগ্রাম দ্বারা ম্যানুয়ালি লোড করা হয়, তাই এটিকে cc_library নিয়মের বিকল্প হিসাবে বিবেচনা করা উচিত নয়। পরিমাপযোগ্যতার জন্য আমরা এই পদ্ধতিটিকে সম্পূর্ণরূপে এড়িয়ে যাওয়ার এবং পরিবর্তে cc_library java_library উপর নির্ভর করার পরামর্শ দিই।

যদি আপনি উভয় linkopts=['-static'] এবং linkshared=True উল্লেখ করেন, তাহলে আপনি একটি সম্পূর্ণ স্বয়ংসম্পূর্ণ ইউনিট পাবেন। আপনি যদি linkstatic=True এবং linkshared=True True উভয়ই নির্দিষ্ট করেন, আপনি একটি একক, বেশিরভাগ স্বয়ংসম্পূর্ণ ইউনিট পাবেন।

linkstatic

Boolean; optional; default is True

cc_binary এবং cc_test এর জন্য: স্ট্যাটিক মোডে বাইনারি লিঙ্ক করুন। cc_library.linkstatic এর জন্য: নীচে দেখুন।

ডিফল্টরূপে এই বিকল্পটি cc_binary এর জন্য চালু এবং বাকিগুলির জন্য বন্ধ।

যদি সক্ষম করা থাকে এবং এটি একটি বাইনারি বা পরীক্ষা হয়, এই বিকল্পটি যখনই সম্ভব ব্যবহারকারী লাইব্রেরির জন্য .so এর পরিবর্তে .a এ লিঙ্ক করতে বলে। কিছু সিস্টেম লাইব্রেরি এখনও গতিশীলভাবে সংযুক্ত থাকতে পারে, যেমন লাইব্রেরির জন্য কোন স্ট্যাটিক লাইব্রেরি নেই। সুতরাং ফলাফল এক্সিকিউটেবল এখনও গতিশীলভাবে লিঙ্ক করা হবে, তাই শুধুমাত্র বেশিরভাগই স্ট্যাটিক।

একটি এক্সিকিউটেবল লিঙ্ক করার জন্য সত্যিই তিনটি ভিন্ন উপায় আছে:

  • সম্পূর্ণ_static_link বৈশিষ্ট্য সহ STATIC, যেখানে সবকিছু স্ট্যাটিকভাবে লিঙ্ক করা হয়; যেমন " gcc -static foo.o libbar.a libbaz.a -lm "।
    features বৈশিষ্ট্যে fully_static_link উল্লেখ করে এই মোড সক্রিয় করা হয়েছে।
  • স্ট্যাটিক, যেখানে সমস্ত ব্যবহারকারীর লাইব্রেরি স্ট্যাটিকভাবে লিঙ্ক করা হয় (যদি একটি স্ট্যাটিক সংস্করণ পাওয়া যায়), কিন্তু যেখানে সিস্টেম লাইব্রেরিগুলি (C/C++ রানটাইম লাইব্রেরিগুলি বাদে) গতিশীলভাবে লিঙ্ক করা হয়, যেমন " gcc foo.o libfoo.a libbaz.a -lm " .
    linkstatic=True নির্দিষ্ট করে এই মোড সক্রিয় করা হয়েছে।
  • ডায়নামিক, যেখানে সমস্ত লাইব্রেরি গতিশীলভাবে সংযুক্ত থাকে (যদি একটি গতিশীল সংস্করণ পাওয়া যায়), যেমন " gcc foo.o libfoo.so libbaz.so -lm "।
    linkstatic=False নির্দিষ্ট করে এই মোড সক্রিয় করা হয়েছে।

cc_library() নিয়মে ব্যবহার করা হলে linkstatic অ্যাট্রিবিউটের আলাদা অর্থ থাকে। একটি C++ লাইব্রেরির জন্য, linkstatic=True নির্দেশ করে যে শুধুমাত্র স্ট্যাটিক লিঙ্কিং অনুমোদিত, তাই কোন .so উত্পাদিত হবে না। linkstatic=False স্ট্যাটিক লাইব্রেরি তৈরি হতে বাধা দেয় না। বৈশিষ্ট্যটি গতিশীল লাইব্রেরি তৈরিকে নিয়ন্ত্রণ করার জন্য বোঝানো হয়।

যদি linkstatic=False , তাহলে বিল্ড টুলটি *.runfiles এলাকায় নির্ভরশীল শেয়ার করা লাইব্রেরিতে সিমলিংক তৈরি করবে।

local_defines

List of strings; optional

কম্পাইল লাইন যোগ করার জন্য সংজ্ঞায়িত তালিকা. "মেক" পরিবর্তনশীল প্রতিস্থাপন এবং বোর্ন শেল টোকেনাইজেশন সাপেক্ষে। প্রতিটি স্ট্রিং, যা অবশ্যই একটি একক Bourne শেল টোকেন নিয়ে গঠিত, -D এর সাথে পূর্বে যুক্ত করা হয় এবং এই লক্ষ্যের জন্য কম্পাইল কমান্ড লাইনে যোগ করা হয়, কিন্তু তার নির্ভরশীলদের জন্য নয়।
malloc

Label ; optional; default is @bazel_tools//tools/cpp:malloc

malloc-এ ডিফল্ট নির্ভরতা ওভাররাইড করুন।

ডিফল্টরূপে, C++ বাইনারিগুলি //tools/cpp:malloc এর সাথে সংযুক্ত থাকে, যা একটি খালি লাইব্রেরি তাই বাইনারি libc malloc ব্যবহার করে শেষ হয়। এই লেবেলটি অবশ্যই একটি cc_library উল্লেখ করবে। যদি সংকলন একটি অ-C++ নিয়মের জন্য হয়, তাহলে এই বিকল্পটির কোনো প্রভাব নেই। linkshared=True নির্দিষ্ট করা থাকলে এই অ্যাট্রিবিউটের মান উপেক্ষা করা হয়।

nocopts

String; optional

C++ কম্পাইলেশন কমান্ড থেকে ম্যাচিং অপশনগুলি সরান। পরিবর্তনশীল প্রতিস্থাপন "বানান" সাপেক্ষে। এই বৈশিষ্ট্যের মান একটি নিয়মিত অভিব্যক্তি হিসাবে ব্যাখ্যা করা হয়। এই রেগুলার এক্সপ্রেশনের সাথে মেলে যেকোন আগে থেকে বিদ্যমান COPTS (বিধির copts অ্যাট্রিবিউটে স্পষ্টভাবে নির্দিষ্ট করা মান সহ) এই নিয়ম কম্পাইল করার উদ্দেশ্যে COPTS থেকে সরিয়ে দেওয়া হবে। এই বৈশিষ্ট্যটি খুব কমই প্রয়োজন হওয়া উচিত।
stamp

Integer; optional; default is -1

বাইনারিতে বিল্ড তথ্য এনকোড করা হবে কিনা। সম্ভাব্য মান:
  • stamp = 1 : সর্বদা বিল্ড তথ্যকে বাইনারিতে স্ট্যাম্প করুন, এমনকি --nostampএই সেটিংটি এড়ানো উচিত , কারণ এটি সম্ভাব্যভাবে বাইনারির জন্য দূরবর্তী ক্যাশিং এবং এটির উপর নির্ভরশীল যেকোনো ডাউনস্ট্রিম অ্যাকশনকে মেরে ফেলে।
  • stamp = 0 : সর্বদা ধ্রুবক মান দ্বারা বিল্ড তথ্য প্রতিস্থাপন করুন। এটি ভাল বিল্ড ফলাফল ক্যাশিং দেয়।
  • stamp = -1 : বিল্ড তথ্যের এম্বেডিং --[no]stamp পতাকা দ্বারা নিয়ন্ত্রিত হয়।

স্ট্যাম্পযুক্ত বাইনারিগুলি পুনর্নির্মাণ করা হয় না যদি না তাদের নির্ভরতা পরিবর্তন হয়।

win_def_file

Label ; optional

Windows DEF ফাইল লিঙ্কারে পাস করা হবে।

এই বৈশিষ্ট্যটি শুধুমাত্র তখনই ব্যবহার করা উচিত যখন উইন্ডোজ টার্গেট প্ল্যাটফর্ম হয়। এটি একটি ভাগ করা লাইব্রেরি লিঙ্ক করার সময় প্রতীক রপ্তানি করতে ব্যবহার করা যেতে পারে।

cc_import

cc_import(name, data, hdrs, alwayslink, compatible_with, deprecation, distribs, features, interface_library, licenses, restricted_to, shared_library, static_library, system_provided, tags, target_compatible_with, testonly, visibility)

cc_import নিয়ম ব্যবহারকারীদের প্রি-কম্পাইল করা C/C++ লাইব্রেরি আমদানি করতে দেয়।

সাধারণ ব্যবহারের ক্ষেত্রে নিম্নলিখিতগুলি হল:
1. একটি স্ট্যাটিক লাইব্রেরি লিঙ্ক করা

cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  static_library = "libmylib.a",
  # If alwayslink is turned on,
  # libmylib.a will be forcely linked into any binary that depends on it.
  # alwayslink = 1,
)
2. একটি শেয়ার্ড লাইব্রেরি লিঙ্ক করা (Unix)
cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  shared_library = "libmylib.so",
)
3. একটি শেয়ার্ড লাইব্রেরীকে ইন্টারফেস লাইব্রেরির সাথে লিঙ্ক করা (Windows) system_provided=True
cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  # mylib.lib is a import library for mylib.dll which will be passed to linker
  interface_library = "mylib.lib",
  # mylib.dll will be available for runtime
  shared_library = "mylib.dll",
)
4. একটি শেয়ার্ড লাইব্রেরি
cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  # mylib.lib is an import library for mylib.dll which will be passed to linker
  interface_library = "mylib.lib",
  # mylib.dll is provided by system environment, for example it can be found in PATH.
  # This indicates that Bazel is not responsible for making mylib.dll available.
  system_provided = 1,
)
করা
cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  # mylib.lib is an import library for mylib.dll which will be passed to linker
  interface_library = "mylib.lib",
  # mylib.dll is provided by system environment, for example it can be found in PATH.
  # This indicates that Bazel is not responsible for making mylib.dll available.
  system_provided = 1,
)
5. স্ট্যাটিক বা শেয়ার্ড লাইব্রেরির সাথে লিঙ্ক করা
ইউনিক্সে:
cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  static_library = "libmylib.a",
  shared_library = "libmylib.so",
)

# first will link to libmylib.a
cc_binary(
  name = "first",
  srcs = ["first.cc"],
  deps = [":mylib"],
  linkstatic = 1, # default value
)

# second will link to libmylib.so
cc_binary(
  name = "second",
  srcs = ["second.cc"],
  deps = [":mylib"],
  linkstatic = 0,
)
উইন্ডোজে:
cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  static_library = "libmylib.lib", # A normal static library
  interface_library = "mylib.lib", # An import library for mylib.dll
  shared_library = "mylib.dll",
)

# first will link to libmylib.lib
cc_binary(
  name = "first",
  srcs = ["first.cc"],
  deps = [":mylib"],
  linkstatic = 1, # default value
)

# second will link to mylib.dll through mylib.lib
cc_binary(
  name = "second",
  srcs = ["second.cc"],
  deps = [":mylib"],
  linkstatic = 0,
)

যুক্তি

গুণাবলী
name

Name ; required

এই লক্ষ্যের জন্য একটি অনন্য নাম।

hdrs

List of labels ; optional

এই প্রাক-সংকলিত লাইব্রেরি দ্বারা প্রকাশিত শিরোনাম ফাইলগুলির তালিকা সরাসরি নির্ভরশীল নিয়মে উত্স দ্বারা অন্তর্ভুক্ত করা হবে।

Boolean; optional; default is False

যদি 1, এই C++ প্রি-কম্পাইল করা লাইব্রেরির উপর নির্ভর করে (প্রত্যক্ষ বা পরোক্ষভাবে) যে কোনো বাইনারি স্ট্যাটিক লাইব্রেরিতে আর্কাইভ করা সমস্ত অবজেক্ট ফাইলের সাথে লিঙ্ক করবে, এমনকি কিছুতে বাইনারি দ্বারা উল্লেখিত কোনো চিহ্ন না থাকলেও। এটি দরকারী যদি আপনার কোডটি বাইনারিতে কোড দ্বারা স্পষ্টভাবে বলা না হয়, যেমন, যদি আপনার কোড কিছু পরিষেবা দ্বারা প্রদত্ত কিছু কলব্যাক গ্রহণ করার জন্য নিবন্ধিত হয়।

যদি সর্বদা লিঙ্ক উইন্ডোজে VS 2017 এর সাথে কাজ না করে, তবে এটি একটি পরিচিত সমস্যার কারণে হয়, অনুগ্রহ করে আপনার VS 2017 কে সর্বশেষ সংস্করণে আপগ্রেড করুন৷

interface_library

Label ; optional

শেয়ার্ড লাইব্রেরি লিঙ্ক করার জন্য একটি একক ইন্টারফেস লাইব্রেরি।

অনুমোদিত ফাইল প্রকার: .ifso , .tbd , .lib , .so বা .dylib

shared_library

Label ; optional

একটি একক প্রি-কম্পাইল করা শেয়ার্ড লাইব্রেরি। Bazel নিশ্চিত করে যে এটি বাইনারির কাছে উপলব্ধ যা রানটাইমের সময় এটির উপর নির্ভর করে।

অনুমোদিত ফাইল প্রকার: .so , .dll বা .dylib

static_library

Label ; optional

একটি একক প্রি-কম্পাইল করা স্ট্যাটিক লাইব্রেরি।

অনুমোদিত ফাইল প্রকার: .a , .pic.a বা .lib

system_provided

Boolean; optional; default is False

যদি 1 হয়, এটি নির্দেশ করে যে রানটাইমে প্রয়োজনীয় শেয়ার্ড লাইব্রেরি সিস্টেম দ্বারা সরবরাহ করা হয়েছে। এই ক্ষেত্রে, interface_library নির্দিষ্ট করা উচিত এবং shared_library খালি হওয়া উচিত।

cc_লাইব্রেরি

cc_library(name, deps, srcs, data, hdrs, alwayslink, compatible_with, copts, defines, deprecation, distribs, exec_compatible_with, exec_properties, features, implementation_deps, include_prefix, includes, licenses, linkopts, linkstamp, linkstatic, local_defines, nocopts, restricted_to, strip_include_prefix, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, win_def_file)

হেডার ইনক্লুশন চেকিং

বিল্ডে ব্যবহৃত সমস্ত হেডার ফাইল cc_* নিয়মের hdrs বা srcs এ ঘোষণা করতে হবে। এটি প্রয়োগ করা হয়।

cc_library নিয়মের জন্য, hdrs এর শিরোনামগুলি লাইব্রেরির সর্বজনীন ইন্টারফেসকে অন্তর্ভুক্ত করে এবং লাইব্রেরির hdrs এবং srcs এর ফাইলগুলির পাশাপাশি hdrs এবং srcs cc_* নিয়মগুলির srcs ফাইলগুলি থেকে সরাসরি অন্তর্ভুক্ত করা যেতে পারে যা তাদের মধ্যে লাইব্রেরি তালিকাভুক্ত করে deps srcs এর শিরোনামগুলি শুধুমাত্র লাইব্রেরির hdrs এবং srcs এর ফাইলগুলি থেকে সরাসরি অন্তর্ভুক্ত করতে হবে। hdrs বা srcs এ একটি শিরোনাম স্থাপন করার সিদ্ধান্ত নেওয়ার সময়, আপনাকে জিজ্ঞাসা করা উচিত যে আপনি এই লাইব্রেরির গ্রাহকরা সরাসরি এটি অন্তর্ভুক্ত করতে সক্ষম হন কিনা। এটি মোটামুটিভাবে প্রোগ্রামিং ভাষায় public এবং private দৃশ্যমানতার মধ্যে একই সিদ্ধান্ত।

cc_binary এবং cc_test নিয়মগুলির একটি রপ্তানি করা ইন্টারফেস নেই, তাই তাদের একটি hdrs বৈশিষ্ট্যও নেই। বাইনারি বা পরীক্ষার সরাসরি অন্তর্গত সমস্ত শিরোনাম srcs এ তালিকাভুক্ত করা উচিত।

এই নিয়মগুলি ব্যাখ্যা করার জন্য, নিম্নলিখিত উদাহরণটি দেখুন।

cc_binary(
    name = "foo",
    srcs = [
        "foo.cc",
        "foo.h",
    ],
    deps = [":bar"],
)

cc_library(
    name = "bar",
    srcs = [
        "bar.cc",
        "bar-impl.h",
    ],
    hdrs = ["bar.h"],
    deps = [":baz"],
)

cc_library(
    name = "baz",
    srcs = [
        "baz.cc",
        "baz-impl.h",
    ],
    hdrs = ["baz.h"],
)

এই উদাহরণে অনুমোদিত সরাসরি অন্তর্ভুক্তিগুলি নীচের সারণীতে তালিকাভুক্ত করা হয়েছে। উদাহরণস্বরূপ foo.cc কে সরাসরি foo.h এবং bar.h অন্তর্ভুক্ত করার অনুমতি দেওয়া হয়েছে, কিন্তু baz.h নয়।

ফাইল সহ অনুমোদিত অন্তর্ভুক্তি
foo.h bar.h
foo.cc foo.h bar.h
bar.h bar-impl.h baz.h
bar-impl.h bar.h baz.h
bar.cc bar.h bar-impl.h baz.h
baz.h baz-impl.h
baz-impl.h baz.h
baz.cc baz.h baz-impl.h

অন্তর্ভুক্তি পরীক্ষা করার নিয়ম শুধুমাত্র সরাসরি অন্তর্ভুক্তির ক্ষেত্রে প্রযোজ্য। উপরের উদাহরণে foo.cc কে bar.h অন্তর্ভুক্ত করার অনুমতি দেওয়া হয়েছে, যার মধ্যে baz.h অন্তর্ভুক্ত থাকতে পারে, যার ফলে baz-impl.h অন্তর্ভুক্ত করার অনুমতি দেওয়া হয়েছে। টেকনিক্যালি, একটি .cc ফাইলের সংকলন ট্রানজিটিভ deps ক্লোজারে যেকোন cc_library এর hdrs বা srcs এ যেকোন হেডার ফাইল অন্তর্ভুক্ত করতে পারে। এই ক্ষেত্রে foo.cc কম্পাইল করার সময় কম্পাইলার baz.h এবং baz-impl.h পড়তে পারে, কিন্তু foo.cc #include "baz.h" থাকা উচিত নয়। এটি অনুমোদিত হওয়ার জন্য, foo এর deps baz যোগ করতে হবে।

দুর্ভাগ্যবশত Bazel বর্তমানে প্রত্যক্ষ এবং ট্রানজিটিভ অন্তর্ভুক্তির মধ্যে পার্থক্য করতে পারে না, তাই এটি ত্রুটির ক্ষেত্রে সনাক্ত করতে পারে না যেখানে একটি ফাইল অবৈধভাবে একটি শিরোনাম সরাসরি অন্তর্ভুক্ত করে যা শুধুমাত্র ট্রানজিটিভভাবে অন্তর্ভুক্ত করার অনুমতি দেওয়া হয়। উদাহরণস্বরূপ, Bazel অভিযোগ করবে না যদি উপরের উদাহরণে foo.cc সরাসরি baz.h অন্তর্ভুক্ত করে। এটি বেআইনি হবে, কারণ foo সরাসরি baz এর উপর নির্ভর করে না। বর্তমানে, এই ক্ষেত্রে কোন ত্রুটি উত্পাদিত হয় না, তবে ভবিষ্যতে এই ধরনের ত্রুটি পরীক্ষা করা যেতে পারে।

যুক্তি

গুণাবলী
name

Name ; required

এই লক্ষ্যের জন্য একটি অনন্য নাম।

deps

List of labels ; optional

বাইনারি টার্গেটের সাথে লিঙ্ক করা অন্যান্য লাইব্রেরির তালিকা।

এগুলি cc_library বা objc_library টার্গেট হতে পারে।

srcs

List of labels ; optional

লক্ষ্য তৈরি করতে প্রক্রিয়া করা C এবং C++ ফাইলগুলির তালিকা। এগুলো হল C/C++ সোর্স এবং হেডার ফাইল, হয় নন-জেনারেটেড (সাধারণ সোর্স কোড) বা জেনারেট করা।

সমস্ত .cc , .c , এবং .cpp ফাইল কম্পাইল করা হবে৷ এই ফাইলগুলি তৈরি হতে পারে: যদি একটি outs ফাইল অন্য কোনও নিয়মের বাইরে থাকে তবে এই নিয়মটি স্বয়ংক্রিয়ভাবে সেই অন্য নিয়মের উপর নির্ভর করবে।

A .h ফাইল কম্পাইল করা হবে না, কিন্তু এই নিয়মের সূত্রে অন্তর্ভুক্ত করার জন্য উপলব্ধ হবে। .cc এবং .h ফাইল উভয়ই সরাসরি এই srcs বা deps আর্গুমেন্টে তালিকাভুক্ত যেকোনো নিয়মের hdrs এ তালিকাভুক্ত শিরোনাম অন্তর্ভুক্ত করতে পারে।

সমস্ত #include d ফাইল এই নিয়মের hdrs অ্যাট্রিবিউটে অথবা রেফারেন্স cc_library() s-এর srcs অ্যাট্রিবিউটে উল্লেখ করতে হবে। প্রস্তাবিত শৈলী হল একটি লাইব্রেরির সাথে যুক্ত হেডারগুলিকে সেই লাইব্রেরির hdrs অ্যাট্রিবিউটে তালিকাভুক্ত করার জন্য এবং এই নিয়মের উত্সগুলির সাথে যুক্ত যেকোন অবশিষ্ট শিরোনামগুলিকে srcs এ তালিকাভুক্ত করার জন্য। আরও বিশদ বিবরণের জন্য "শিরোনাম অন্তর্ভুক্তি পরীক্ষা" দেখুন।

যদি একটি নিয়মের নাম srcs এ থাকে, তাহলে এই নিয়মটি স্বয়ংক্রিয়ভাবে সেইটির উপর নির্ভর করে। যদি নামকৃত নিয়মের outs C বা C++ সোর্স ফাইল হয়, তবে সেগুলি এই নিয়মে সংকলিত হয়; যদি সেগুলি লাইব্রেরি ফাইল হয়, তাহলে সেগুলি লিঙ্ক করা আছে।

অনুমোদিত srcs ফাইল প্রকার:

  • C এবং C++ সোর্স ফাইল: .c , .cc , .cpp , .cxx , .c++ , .C
  • C এবং C++ হেডার ফাইল: .h , .hh , .hpp , .hxx , .inc , .inl , .H
  • সি প্রিপ্রসেসর সহ অ্যাসেম্বলার: .S
  • সংরক্ষণাগার: .a , .pic.a
  • লাইব্রেরি "সর্বদা লিঙ্ক করুন": .lo , .pic.lo
  • শেয়ার্ড লাইব্রেরি, ভার্সনড বা আনভার্সনড: .so , .so. version
  • অবজেক্ট ফাইল: .pic.o , .o

...এবং সেই ফাইলগুলি তৈরি করে এমন কোনো নিয়ম। বিভিন্ন এক্সটেনশন জিসিসি কনভেনশন অনুযায়ী বিভিন্ন প্রোগ্রামিং ভাষাকে নির্দেশ করে।

hdrs

List of labels ; optional

এই লাইব্রেরি দ্বারা প্রকাশিত শিরোনাম ফাইলগুলির তালিকা সরাসরি নির্ভরশীল নিয়মে উত্স দ্বারা অন্তর্ভুক্ত করা হবে৷

লাইব্রেরির ইন্টারফেস বর্ণনা করে এমন হেডার ফাইল ঘোষণা করার জন্য এটি দৃঢ়ভাবে পছন্দের অবস্থান। এই শিরোনামগুলি এই নিয়মের সূত্রে বা নির্ভরশীল নিয়মে অন্তর্ভুক্ত করার জন্য উপলব্ধ করা হবে। এই লাইব্রেরির কোনো ক্লায়েন্ট যে হেডারগুলিকে অন্তর্ভুক্ত করতে চায় না srcs অ্যাট্রিবিউটে তালিকাভুক্ত করা উচিত, এমনকি যদি সেগুলি একটি প্রকাশিত হেডার দ্বারা অন্তর্ভুক্ত করা হয়। আরও বিশদ বিবরণের জন্য "শিরোনাম অন্তর্ভুক্তি পরীক্ষা" দেখুন।

Boolean; optional; default is False

যদি 1, এই C++ লাইব্রেরির উপর নির্ভর করে (প্রত্যক্ষ বা পরোক্ষভাবে) যে কোনো বাইনারি srcs এ তালিকাভুক্ত ফাইলগুলির জন্য সমস্ত অবজেক্ট ফাইলে লিঙ্ক করবে, এমনকি কিছুতে বাইনারি দ্বারা উল্লেখিত কোনো চিহ্ন না থাকলেও। এটি দরকারী যদি আপনার কোডটি বাইনারিতে কোড দ্বারা স্পষ্টভাবে বলা না হয়, যেমন, যদি আপনার কোড কিছু পরিষেবা দ্বারা প্রদত্ত কিছু কলব্যাক গ্রহণ করার জন্য নিবন্ধিত হয়।

যদি সর্বদা লিঙ্ক উইন্ডোজে VS 2017 এর সাথে কাজ না করে, তবে এটি একটি পরিচিত সমস্যার কারণে হয়, অনুগ্রহ করে আপনার VS 2017 কে সর্বশেষ সংস্করণে আপগ্রেড করুন৷

copts

List of strings; optional

C++ কম্পাইলেশন কমান্ডে এই বিকল্পগুলি যোগ করুন। "ভেরিয়েবল তৈরি করুন" প্রতিস্থাপন এবং বোর্ন শেল টোকেনাইজেশন সাপেক্ষে।

বাইনারি টার্গেট কম্পাইল করার আগে এই অ্যাট্রিবিউটের প্রতিটি স্ট্রিং COPTS এ প্রদত্ত ক্রমে যোগ করা হয়। ফ্ল্যাগগুলি শুধুমাত্র এই টার্গেট কম্পাইল করার জন্য কার্যকর হয়, এর নির্ভরতা নয়, তাই অন্য কোথাও অন্তর্ভুক্ত হেডার ফাইলগুলির বিষয়ে সতর্ক থাকুন। সমস্ত পাথ কর্মক্ষেত্রের সাথে সম্পর্কিত হওয়া উচিত, বর্তমান প্যাকেজের সাথে নয়।

যদি প্যাকেজটি no_copts_tokenization বৈশিষ্ট্যটি ঘোষণা করে, Bourne শেল টোকেনাইজেশন শুধুমাত্র একটি "মেক" ভেরিয়েবল নিয়ে গঠিত স্ট্রিংগুলিতে প্রযোজ্য।

defines

List of strings; optional

কম্পাইল লাইন যোগ করার জন্য সংজ্ঞায়িত তালিকা. "মেক" পরিবর্তনশীল প্রতিস্থাপন এবং বোর্ন শেল টোকেনাইজেশন সাপেক্ষে। প্রতিটি স্ট্রিং, যা অবশ্যই একটি একক Bourne শেল টোকেন নিয়ে গঠিত, -D এর সাথে পূর্বে যুক্ত করা হয় এবং এই লক্ষ্যে কম্পাইল কমান্ড লাইনে যোগ করা হয়, সেইসাথে এটির উপর নির্ভর করে এমন প্রতিটি নিয়মে। খুব সতর্ক থাকুন, কারণ এর সুদূরপ্রসারী প্রভাব থাকতে পারে। সন্দেহ হলে, পরিবর্তে local_defines এ define মান যোগ করুন।
implementation_deps

List of labels ; optional

অন্যান্য লাইব্রেরির তালিকা যা লাইব্রেরির লক্ষ্য নির্ভর করে। deps বিপরীতে, এই লাইব্রেরিগুলির শিরোনাম এবং অন্তর্ভুক্ত পাথগুলি (এবং তাদের সমস্ত ট্রানজিটিভ ডিপ) শুধুমাত্র এই লাইব্রেরির সংকলনের জন্য ব্যবহৃত হয়, এবং এটির উপর নির্ভরশীল লাইব্রেরিগুলি নয়। implementation_deps সাথে নির্দিষ্ট করা লাইব্রেরিগুলি এখনও এই লাইব্রেরির উপর নির্ভর করে বাইনারি টার্গেটে লিঙ্ক করা আছে।

আপাতত ব্যবহার cc_libraries-এ সীমাবদ্ধ এবং পতাকা দ্বারা সুরক্ষিত --experimental_cc_implementation_deps

include_prefix

String; optional

এই নিয়মের হেডারের পাথ যোগ করার উপসর্গ।

সেট করা হলে, এই নিয়মের hdrs অ্যাট্রিবিউটের শিরোনামগুলি তাদের রিপোজিটরি-রিলেটিভ পাথের সাথে যুক্ত এই অ্যাট্রিবিউটের মানটিতে অ্যাক্সেসযোগ্য।

এই উপসর্গ যোগ করার আগে strip_include_prefix অ্যাট্রিবিউটের উপসর্গটি সরানো হয়।

includes

List of strings; optional

কম্পাইল লাইনে যুক্ত করার জন্য অন্তর্ভুক্ত ডিরগুলির তালিকা।

"ভেরিয়েবল তৈরি করুন" প্রতিস্থাপনের বিষয়। প্রতিটি স্ট্রিং -isystem-এর সাথে পূর্বে লেখা হয় এবং -isystem এ যোগ করা COPTSCOPTS এর বিপরীতে, এই পতাকাগুলি এই নিয়মের জন্য এবং এর উপর নির্ভর করে এমন প্রতিটি নিয়মের জন্য যোগ করা হয়েছে। (দ্রষ্টব্য: এটি যে নিয়মের উপর নির্ভর করে তা নয়!) খুব সতর্ক থাকুন, কারণ এটি সুদূরপ্রসারী প্রভাব ফেলতে পারে। সন্দেহ হলে, পরিবর্তে COPTS- এ "-I" পতাকা যোগ করুন।

হেডারগুলি অবশ্যই srcs বা hdrs-এ যোগ করতে হবে, অন্যথায় যখন সংকলন স্যান্ডবক্স করা হয় তখন সেগুলি নির্ভরশীল নিয়মগুলিতে উপলব্ধ হবে না (ডিফল্ট)।

linkopts

List of strings; optional

C++ লিঙ্কার কমান্ডে এই পতাকা যোগ করুন। "মেক" পরিবর্তনশীল প্রতিস্থাপন, বোর্ন শেল টোকেনাইজেশন এবং লেবেল সম্প্রসারণ সাপেক্ষে। বাইনারি টার্গেট লিঙ্ক করার আগে এই অ্যাট্রিবিউটের প্রতিটি স্ট্রিং LINKOPTS এ যোগ করা হয়।

এই তালিকার প্রতিটি উপাদান যা $ বা - দিয়ে শুরু হয় না তা deps এ একটি লক্ষ্যের লেবেল বলে ধরে নেওয়া হয়। সেই লক্ষ্য দ্বারা উত্পন্ন ফাইলগুলির তালিকা লিঙ্কার বিকল্পগুলিতে যুক্ত করা হয়েছে। একটি ত্রুটি রিপোর্ট করা হয় যদি লেবেলটি অবৈধ হয়, বা deps -এ ঘোষণা না করা হয়।

linkstamp

Label ; optional

একই সাথে কম্পাইল করে এবং নির্দিষ্ট C++ সোর্স ফাইলটিকে চূড়ান্ত বাইনারিতে লিঙ্ক করে। বাইনারিগুলিতে টাইমস্ট্যাম্প তথ্য প্রবর্তনের জন্য এই কৌশলটি প্রয়োজন; যদি আমরা স্বাভাবিক উপায়ে একটি অবজেক্ট ফাইলে উত্স ফাইলটি কম্পাইল করি তবে টাইমস্ট্যাম্পটি ভুল হবে। একটি লিঙ্কস্ট্যাম্প সংকলনে কম্পাইলার ফ্ল্যাগের কোনো নির্দিষ্ট সেট অন্তর্ভুক্ত নাও হতে পারে এবং তাই কোনো নির্দিষ্ট শিরোনাম, কম্পাইলার বিকল্প বা অন্যান্য বিল্ড ভেরিয়েবলের উপর নির্ভর করা উচিত নয়। এই বিকল্পটি শুধুমাত্র base প্যাকেজে প্রয়োজন হবে।
linkstatic

Boolean; optional; default is False

cc_binary এবং cc_test এর জন্য: স্ট্যাটিক মোডে বাইনারি লিঙ্ক করুন। cc_library.linkstatic এর জন্য: নীচে দেখুন।

ডিফল্টরূপে এই বিকল্পটি cc_binary এর জন্য চালু এবং বাকিগুলির জন্য বন্ধ।

যদি সক্ষম করা থাকে এবং এটি একটি বাইনারি বা পরীক্ষা হয়, এই বিকল্পটি যখনই সম্ভব ব্যবহারকারী লাইব্রেরির জন্য .so এর পরিবর্তে .a এ লিঙ্ক করতে বলে। কিছু সিস্টেম লাইব্রেরি এখনও গতিশীলভাবে সংযুক্ত থাকতে পারে, যেমন লাইব্রেরির জন্য কোন স্ট্যাটিক লাইব্রেরি নেই। সুতরাং ফলাফল এক্সিকিউটেবল এখনও গতিশীলভাবে লিঙ্ক করা হবে, তাই শুধুমাত্র বেশিরভাগই স্ট্যাটিক।

একটি এক্সিকিউটেবল লিঙ্ক করার জন্য সত্যিই তিনটি ভিন্ন উপায় আছে:

  • সম্পূর্ণ_static_link বৈশিষ্ট্য সহ STATIC, যেখানে সবকিছু স্ট্যাটিকভাবে লিঙ্ক করা হয়; যেমন " gcc -static foo.o libbar.a libbaz.a -lm "।
    features বৈশিষ্ট্যে fully_static_link উল্লেখ করে এই মোড সক্রিয় করা হয়েছে।
  • স্ট্যাটিক, যেখানে সমস্ত ব্যবহারকারীর লাইব্রেরি স্ট্যাটিকভাবে লিঙ্ক করা হয় (যদি একটি স্ট্যাটিক সংস্করণ পাওয়া যায়), কিন্তু যেখানে সিস্টেম লাইব্রেরিগুলি (C/C++ রানটাইম লাইব্রেরিগুলি বাদে) গতিশীলভাবে লিঙ্ক করা হয়, যেমন " gcc foo.o libfoo.a libbaz.a -lm " .
    linkstatic=True নির্দিষ্ট করে এই মোড সক্রিয় করা হয়েছে।
  • ডায়নামিক, যেখানে সমস্ত লাইব্রেরি গতিশীলভাবে সংযুক্ত থাকে (যদি একটি গতিশীল সংস্করণ পাওয়া যায়), যেমন " gcc foo.o libfoo.so libbaz.so -lm "।
    linkstatic=False নির্দিষ্ট করে এই মোড সক্রিয় করা হয়েছে।

cc_library() নিয়মে ব্যবহার করা হলে linkstatic অ্যাট্রিবিউটের আলাদা অর্থ থাকে। একটি C++ লাইব্রেরির জন্য, linkstatic=True নির্দেশ করে যে শুধুমাত্র স্ট্যাটিক লিঙ্কিং অনুমোদিত, তাই কোন .so উত্পাদিত হবে না। linkstatic=False স্ট্যাটিক লাইব্রেরি তৈরি হতে বাধা দেয় না। বৈশিষ্ট্যটি গতিশীল লাইব্রেরি তৈরিকে নিয়ন্ত্রণ করার জন্য বোঝানো হয়।

যদি linkstatic=False , তাহলে বিল্ড টুলটি *.runfiles এলাকায় নির্ভরশীল শেয়ার করা লাইব্রেরিতে সিমলিংক তৈরি করবে।

local_defines

List of strings; optional

কম্পাইল লাইন যোগ করার জন্য সংজ্ঞায়িত তালিকা. "মেক" পরিবর্তনশীল প্রতিস্থাপন এবং বোর্ন শেল টোকেনাইজেশন সাপেক্ষে। প্রতিটি স্ট্রিং, যা অবশ্যই একটি একক Bourne শেল টোকেন নিয়ে গঠিত, -D এর সাথে পূর্বে যুক্ত করা হয় এবং এই লক্ষ্যের জন্য কম্পাইল কমান্ড লাইনে যোগ করা হয়, কিন্তু তার নির্ভরশীলদের জন্য নয়।
nocopts

String; optional

C++ কম্পাইলেশন কমান্ড থেকে ম্যাচিং অপশনগুলি সরান। পরিবর্তনশীল প্রতিস্থাপন "বানান" সাপেক্ষে। এই বৈশিষ্ট্যের মান একটি নিয়মিত অভিব্যক্তি হিসাবে ব্যাখ্যা করা হয়। এই রেগুলার এক্সপ্রেশনের সাথে মেলে যেকোন আগে থেকে বিদ্যমান COPTS (বিধির copts অ্যাট্রিবিউটে স্পষ্টভাবে নির্দিষ্ট করা মান সহ) এই নিয়ম কম্পাইল করার উদ্দেশ্যে COPTS থেকে সরিয়ে দেওয়া হবে। এই বৈশিষ্ট্যটি খুব কমই প্রয়োজন হওয়া উচিত।
strip_include_prefix

String; optional

এই নিয়মের শিরোনামগুলির পথ থেকে সরানোর উপসর্গ।

সেট করা হলে, এই নিয়মের hdrs অ্যাট্রিবিউটের শিরোনামগুলি এই উপসর্গটি কেটে দিয়ে তাদের পথে অ্যাক্সেসযোগ্য।

যদি এটি একটি আপেক্ষিক পথ হয় তবে এটি একটি প্যাকেজ-আপেক্ষিক হিসাবে নেওয়া হয়। যদি এটি একটি পরম এক হয়, এটি একটি সংগ্রহস্থল-আপেক্ষিক পথ হিসাবে বোঝা যায়।

এই include_prefix ছিনতাই করার পরে অন্তর্ভুক্ত_প্রেফিক্স অ্যাট্রিবিউটের উপসর্গ যোগ করা হয়।

textual_hdrs

List of labels ; optional

এই লাইব্রেরি দ্বারা প্রকাশিত শিরোনাম ফাইলগুলির তালিকা পাঠ্যরূপে নির্ভরশীল নিয়মে উত্স দ্বারা অন্তর্ভুক্ত করা হবে৷

এটি হেডার ফাইল ঘোষণা করার জন্য অবস্থান যা তাদের নিজের উপর কম্পাইল করা যাবে না; অর্থাৎ, বৈধ কোড তৈরি করার জন্য সেগুলিকে সর্বদা অন্যান্য উত্স ফাইল দ্বারা পাঠ্যভাবে অন্তর্ভুক্ত করতে হবে।

win_def_file

Label ; optional

Windows DEF ফাইল লিঙ্কারে পাস করা হবে।

এই বৈশিষ্ট্যটি শুধুমাত্র তখনই ব্যবহার করা উচিত যখন উইন্ডোজ টার্গেট প্ল্যাটফর্ম হয়। এটি একটি ভাগ করা লাইব্রেরি লিঙ্ক করার সময় প্রতীক রপ্তানি করতে ব্যবহার করা যেতে পারে।

cc_proto_library

cc_proto_library(name, deps, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)

cc_proto_library .proto ফাইল থেকে C++ কোড তৈরি করে।

deps অবশ্যই proto_library নিয়ম নির্দেশ করবে।

উদাহরণ:

cc_library(
    name = "lib",
    deps = [":foo_cc_proto"],
)

cc_proto_library(
    name = "foo_cc_proto",
    deps = [":foo_proto"],
)

proto_library(
    name = "foo_proto",
)

যুক্তি

গুণাবলী
name

Name ; required

এই লক্ষ্যের জন্য একটি অনন্য নাম।

deps

List of labels ; optional

proto_library নিয়মের তালিকা যার জন্য C++ কোড তৈরি করতে হবে।

fdo_prefetch_hints

fdo_prefetch_hints(name, compatible_with, deprecation, distribs, features, licenses, profile, restricted_to, tags, target_compatible_with, testonly, visibility)

একটি FDO প্রিফেচ ইঙ্গিত প্রোফাইল প্রতিনিধিত্ব করে যেটি হয় কর্মক্ষেত্রে বা একটি নির্দিষ্ট পরম পথে। উদাহরণ:

fdo_prefetch_hints(
    name = "hints",
    profile = "//path/to/hints:profile.afdo",
)

fdo_profile(
  name = "hints_abs",
  absolute_path_profile = "/absolute/path/profile.afdo",
)

যুক্তি

গুণাবলী
name

Name ; required

এই লক্ষ্যের জন্য একটি অনন্য নাম।

profile

Label ; optional

ইঙ্গিত প্রোফাইলের লেবেল। ইঙ্গিত ফাইলটিতে .afdo এক্সটেনশন রয়েছে লেবেলটি একটি fdo_absolute_path_profile নিয়মের দিকেও নির্দেশ করতে পারে।

fdo_profile

fdo_profile(name, absolute_path_profile, compatible_with, deprecation, distribs, features, licenses, profile, proto_profile, restricted_to, tags, target_compatible_with, testonly, visibility)

একটি FDO প্রোফাইল প্রতিনিধিত্ব করে যা হয় কর্মক্ষেত্রে বা একটি নির্দিষ্ট পরম পথে। উদাহরণ:

fdo_profile(
    name = "fdo",
    profile = "//path/to/fdo:profile.zip",
)

fdo_profile(
  name = "fdo_abs",
  absolute_path_profile = "/absolute/path/profile.zip",
)

যুক্তি

গুণাবলী
name

Name ; required

এই লক্ষ্যের জন্য একটি অনন্য নাম।

absolute_path_profile

String; optional

FDO প্রোফাইলের সম্পূর্ণ পথ। FDO ফাইলে নিম্নলিখিত এক্সটেনশনগুলির মধ্যে একটি থাকতে পারে: .অইনডেক্সড LLVM প্রোফাইলের জন্য profraw, .indexed LLVM প্রোফাইলের জন্য profdata, .zip যা একটি LLVM profraw প্রোফাইল ধারণ করে, অথবা AutoFDO প্রোফাইলের জন্য .afdo৷
profile

Label ; optional

FDO প্রোফাইলের লেবেল বা একটি নিয়ম যা এটি তৈরি করে। FDO ফাইলে নিম্নলিখিত এক্সটেনশনগুলির মধ্যে একটি থাকতে পারে: .অইনডেক্সড LLVM প্রোফাইলের জন্য profraw, .Indexed LLVM প্রোফাইলের জন্য profdata, .zip যা একটি LLVM profraw প্রোফাইল ধারণ করে, AutoFDO প্রোফাইলের জন্য .afdo, XBinary প্রোফাইলের জন্য .xfdo৷ লেবেলটি একটি fdo_absolute_path_profile নিয়মের দিকেও নির্দেশ করতে পারে।
proto_profile

Label ; optional

প্রোটোবাফ প্রোফাইলের লেবেল।

প্রপেলার_অপ্টিমাইজ

propeller_optimize(name, compatible_with, deprecation, distribs, features, ld_profile, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)

কর্মক্ষেত্রে একটি প্রপেলার অপ্টিমাইজেশান প্রোফাইল প্রতিনিধিত্ব করে। উদাহরণ:

propeller_optimize(
    name = "layout",
    cc_profile = "//path:cc_profile.txt",
    ld_profile = "//path:ld_profile.txt"
)

propeller_optimize(
    name = "layout_absolute",
    absolute_cc_profile = "/absolute/cc_profile.txt",
    absolute_ld_profile = "/absolute/ld_profile.txt"
)

যুক্তি

গুণাবলী
name

Name ; required

এই লক্ষ্যের জন্য একটি অনন্য নাম।

ld_profile

Label ; optional

প্রোফাইলের লেবেল লিঙ্ক অ্যাকশনে পাস করা হয়েছে। এই ফাইলটিতে .txt এক্সটেনশন রয়েছে।

cc_পরীক্ষা

cc_test(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, copts, defines, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, includes, licenses, linkopts, linkstatic, local, local_defines, malloc, nocopts, restricted_to, shard_count, size, stamp, tags, target_compatible_with, testonly, timeout, toolchains, visibility, win_def_file)

যুক্তি

গুণাবলী
name

Name ; required

এই লক্ষ্যের জন্য একটি অনন্য নাম।

deps

List of labels ; optional

বাইনারি টার্গেটের সাথে লিঙ্ক করা অন্যান্য লাইব্রেরির তালিকা।

এগুলি cc_library বা objc_library টার্গেট হতে পারে।

srcs

List of labels ; optional

লক্ষ্য তৈরি করতে প্রক্রিয়া করা C এবং C++ ফাইলগুলির তালিকা। এগুলো হল C/C++ সোর্স এবং হেডার ফাইল, হয় নন-জেনারেটেড (সাধারণ সোর্স কোড) বা জেনারেট করা।

সমস্ত .cc , .c , এবং .cpp ফাইল কম্পাইল করা হবে৷ এই ফাইলগুলি তৈরি হতে পারে: যদি একটি outs ফাইল অন্য কোনও নিয়মের বাইরে থাকে তবে এই নিয়মটি স্বয়ংক্রিয়ভাবে সেই অন্য নিয়মের উপর নির্ভর করবে।

A .h ফাইল কম্পাইল করা হবে না, কিন্তু এই নিয়মের সূত্রে অন্তর্ভুক্ত করার জন্য উপলব্ধ হবে। .cc এবং .h ফাইল উভয়ই সরাসরি এই srcs বা deps আর্গুমেন্টে তালিকাভুক্ত যেকোনো নিয়মের hdrs এ তালিকাভুক্ত শিরোনাম অন্তর্ভুক্ত করতে পারে।

সমস্ত #include d ফাইল এই নিয়মের hdrs অ্যাট্রিবিউটে অথবা রেফারেন্স cc_library() s-এর srcs অ্যাট্রিবিউটে উল্লেখ করতে হবে। প্রস্তাবিত শৈলী হল একটি লাইব্রেরির সাথে যুক্ত হেডারগুলিকে সেই লাইব্রেরির hdrs অ্যাট্রিবিউটে তালিকাভুক্ত করার জন্য এবং এই নিয়মের উত্সগুলির সাথে যুক্ত যেকোন অবশিষ্ট শিরোনামগুলিকে srcs এ তালিকাভুক্ত করার জন্য। আরও বিশদ বিবরণের জন্য "শিরোনাম অন্তর্ভুক্তি পরীক্ষা" দেখুন।

যদি একটি নিয়মের নাম srcs এ থাকে, তাহলে এই নিয়মটি স্বয়ংক্রিয়ভাবে সেইটির উপর নির্ভর করে। যদি নামকৃত নিয়মের outs C বা C++ সোর্স ফাইল হয়, তবে সেগুলি এই নিয়মে সংকলিত হয়; যদি সেগুলি লাইব্রেরি ফাইল হয়, তাহলে সেগুলি লিঙ্ক করা আছে।

অনুমোদিত srcs ফাইল প্রকার:

  • C এবং C++ সোর্স ফাইল: .c , .cc , .cpp , .cxx , .c++ , .C
  • C এবং C++ হেডার ফাইল: .h , .hh , .hpp , .hxx , .inc , .inl , .H
  • সি প্রিপ্রসেসর সহ অ্যাসেম্বলার: .S
  • সংরক্ষণাগার: .a , .pic.a
  • লাইব্রেরি "সর্বদা লিঙ্ক করুন": .lo , .pic.lo
  • শেয়ার্ড লাইব্রেরি, ভার্সনড বা আনভার্সনড: .so , .so. version
  • অবজেক্ট ফাইল: .pic.o , .o

...এবং সেই ফাইলগুলি তৈরি করে এমন কোনো নিয়ম। বিভিন্ন এক্সটেনশন জিসিসি কনভেনশন অনুযায়ী বিভিন্ন প্রোগ্রামিং ভাষাকে নির্দেশ করে।

additional_linker_inputs

List of labels ; optional

এই ফাইলগুলিকে C++ লিঙ্কার কমান্ডে পাঠান।

উদাহরণস্বরূপ, সংকলিত Windows .res ফাইলগুলি এখানে বাইনারি টার্গেটে এম্বেড করার জন্য দেওয়া যেতে পারে।

copts

List of strings; optional

C++ কম্পাইলেশন কমান্ডে এই বিকল্পগুলি যোগ করুন। "ভেরিয়েবল তৈরি করুন" প্রতিস্থাপন এবং বোর্ন শেল টোকেনাইজেশন সাপেক্ষে।

বাইনারি টার্গেট কম্পাইল করার আগে এই অ্যাট্রিবিউটের প্রতিটি স্ট্রিং COPTS এ প্রদত্ত ক্রমে যোগ করা হয়। ফ্ল্যাগগুলি শুধুমাত্র এই টার্গেট কম্পাইল করার জন্য কার্যকর হয়, এর নির্ভরতা নয়, তাই অন্য কোথাও অন্তর্ভুক্ত হেডার ফাইলগুলির বিষয়ে সতর্ক থাকুন। সমস্ত পাথ কর্মক্ষেত্রের সাথে সম্পর্কিত হওয়া উচিত, বর্তমান প্যাকেজের সাথে নয়।

যদি প্যাকেজটি no_copts_tokenization বৈশিষ্ট্যটি ঘোষণা করে, Bourne শেল টোকেনাইজেশন শুধুমাত্র একটি "মেক" ভেরিয়েবল নিয়ে গঠিত স্ট্রিংগুলিতে প্রযোজ্য।

defines

List of strings; optional

কম্পাইল লাইন যোগ করার জন্য সংজ্ঞায়িত তালিকা. "মেক" পরিবর্তনশীল প্রতিস্থাপন এবং বোর্ন শেল টোকেনাইজেশন সাপেক্ষে। প্রতিটি স্ট্রিং, যা অবশ্যই একটি একক Bourne শেল টোকেন নিয়ে গঠিত, -D এর সাথে পূর্বে যুক্ত করা হয় এবং এই লক্ষ্যে কম্পাইল কমান্ড লাইনে যোগ করা হয়, সেইসাথে এটির উপর নির্ভর করে এমন প্রতিটি নিয়মে। খুব সতর্ক থাকুন, কারণ এর সুদূরপ্রসারী প্রভাব থাকতে পারে। সন্দেহ হলে, পরিবর্তে local_defines এ define মান যোগ করুন।
includes

List of strings; optional

কম্পাইল লাইনে যুক্ত করার জন্য অন্তর্ভুক্ত ডিরগুলির তালিকা।

"ভেরিয়েবল তৈরি করুন" প্রতিস্থাপনের বিষয়। প্রতিটি স্ট্রিং -isystem-এর সাথে পূর্বে লেখা হয় এবং -isystem এ যোগ করা COPTSCOPTS এর বিপরীতে, এই পতাকাগুলি এই নিয়মের জন্য এবং এর উপর নির্ভর করে এমন প্রতিটি নিয়মের জন্য যোগ করা হয়েছে। (দ্রষ্টব্য: এটি যে নিয়মের উপর নির্ভর করে তা নয়!) খুব সতর্ক থাকুন, কারণ এটি সুদূরপ্রসারী প্রভাব ফেলতে পারে। সন্দেহ হলে, পরিবর্তে COPTS- এ "-I" পতাকা যোগ করুন।

হেডারগুলি অবশ্যই srcs বা hdrs-এ যোগ করতে হবে, অন্যথায় যখন সংকলন স্যান্ডবক্স করা হয় তখন সেগুলি নির্ভরশীল নিয়মগুলিতে উপলব্ধ হবে না (ডিফল্ট)।

linkopts

List of strings; optional

C++ লিঙ্কার কমান্ডে এই পতাকা যোগ করুন। "মেক" পরিবর্তনশীল প্রতিস্থাপন, বোর্ন শেল টোকেনাইজেশন এবং লেবেল সম্প্রসারণ সাপেক্ষে। বাইনারি টার্গেট লিঙ্ক করার আগে এই অ্যাট্রিবিউটের প্রতিটি স্ট্রিং LINKOPTS এ যোগ করা হয়।

এই তালিকার প্রতিটি উপাদান যা $ বা - দিয়ে শুরু হয় না তা deps এ একটি লক্ষ্যের লেবেল বলে ধরে নেওয়া হয়। সেই লক্ষ্য দ্বারা উত্পন্ন ফাইলগুলির তালিকা লিঙ্কার বিকল্পগুলিতে যুক্ত করা হয়েছে। একটি ত্রুটি রিপোর্ট করা হয় যদি লেবেলটি অবৈধ হয়, বা deps -এ ঘোষণা না করা হয়।

linkstatic

Boolean; optional; default is False

cc_binary এবং cc_test এর জন্য: স্ট্যাটিক মোডে বাইনারি লিঙ্ক করুন। cc_library.linkstatic এর জন্য: নীচে দেখুন।

ডিফল্টরূপে এই বিকল্পটি cc_binary এর জন্য চালু এবং বাকিগুলির জন্য বন্ধ।

যদি সক্ষম করা থাকে এবং এটি একটি বাইনারি বা পরীক্ষা হয়, এই বিকল্পটি যখনই সম্ভব ব্যবহারকারী লাইব্রেরির জন্য .so এর পরিবর্তে .a এ লিঙ্ক করতে বলে। কিছু সিস্টেম লাইব্রেরি এখনও গতিশীলভাবে সংযুক্ত থাকতে পারে, যেমন লাইব্রেরির জন্য কোন স্ট্যাটিক লাইব্রেরি নেই। সুতরাং ফলাফল এক্সিকিউটেবল এখনও গতিশীলভাবে লিঙ্ক করা হবে, তাই শুধুমাত্র বেশিরভাগই স্ট্যাটিক।

একটি এক্সিকিউটেবল লিঙ্ক করার জন্য সত্যিই তিনটি ভিন্ন উপায় আছে:

  • সম্পূর্ণ_static_link বৈশিষ্ট্য সহ STATIC, যেখানে সবকিছু স্ট্যাটিকভাবে লিঙ্ক করা হয়; যেমন " gcc -static foo.o libbar.a libbaz.a -lm "।
    features বৈশিষ্ট্যে fully_static_link উল্লেখ করে এই মোড সক্রিয় করা হয়েছে।
  • স্ট্যাটিক, যেখানে সমস্ত ব্যবহারকারীর লাইব্রেরি স্ট্যাটিকভাবে লিঙ্ক করা হয় (যদি একটি স্ট্যাটিক সংস্করণ পাওয়া যায়), কিন্তু যেখানে সিস্টেম লাইব্রেরিগুলি (C/C++ রানটাইম লাইব্রেরিগুলি বাদে) গতিশীলভাবে লিঙ্ক করা হয়, যেমন " gcc foo.o libfoo.a libbaz.a -lm " .
    linkstatic=True নির্দিষ্ট করে এই মোড সক্রিয় করা হয়েছে।
  • ডায়নামিক, যেখানে সমস্ত লাইব্রেরি গতিশীলভাবে সংযুক্ত থাকে (যদি একটি গতিশীল সংস্করণ পাওয়া যায়), যেমন " gcc foo.o libfoo.so libbaz.so -lm "।
    linkstatic=False নির্দিষ্ট করে এই মোড সক্রিয় করা হয়েছে।

cc_library() নিয়মে ব্যবহার করা হলে linkstatic অ্যাট্রিবিউটের আলাদা অর্থ থাকে। একটি C++ লাইব্রেরির জন্য, linkstatic=True নির্দেশ করে যে শুধুমাত্র স্ট্যাটিক লিঙ্কিং অনুমোদিত, তাই কোন .so উত্পাদিত হবে না। linkstatic=False স্ট্যাটিক লাইব্রেরি তৈরি হতে বাধা দেয় না। বৈশিষ্ট্যটি গতিশীল লাইব্রেরি তৈরিকে নিয়ন্ত্রণ করার জন্য বোঝানো হয়।

যদি linkstatic=False , তাহলে বিল্ড টুলটি *.runfiles এলাকায় নির্ভরশীল শেয়ার করা লাইব্রেরিতে সিমলিংক তৈরি করবে।

local_defines

List of strings; optional

কম্পাইল লাইন যোগ করার জন্য সংজ্ঞায়িত তালিকা. "মেক" পরিবর্তনশীল প্রতিস্থাপন এবং বোর্ন শেল টোকেনাইজেশন সাপেক্ষে। প্রতিটি স্ট্রিং, যা অবশ্যই একটি একক Bourne শেল টোকেন নিয়ে গঠিত, -D এর সাথে পূর্বে যুক্ত করা হয় এবং এই লক্ষ্যের জন্য কম্পাইল কমান্ড লাইনে যোগ করা হয়, কিন্তু তার নির্ভরশীলদের জন্য নয়।
malloc

Label ; optional; default is @bazel_tools//tools/cpp:malloc

malloc-এ ডিফল্ট নির্ভরতা ওভাররাইড করুন।

ডিফল্টরূপে, C++ বাইনারিগুলি //tools/cpp:malloc এর সাথে সংযুক্ত থাকে, যা একটি খালি লাইব্রেরি তাই বাইনারি libc malloc ব্যবহার করে শেষ হয়। এই লেবেলটি অবশ্যই একটি cc_library উল্লেখ করবে। যদি সংকলন একটি অ-C++ নিয়মের জন্য হয়, তাহলে এই বিকল্পটির কোনো প্রভাব নেই। linkshared=True নির্দিষ্ট করা থাকলে এই অ্যাট্রিবিউটের মান উপেক্ষা করা হয়।

nocopts

String; optional

C++ কম্পাইলেশন কমান্ড থেকে ম্যাচিং অপশনগুলি সরান। পরিবর্তনশীল প্রতিস্থাপন "বানান" সাপেক্ষে। এই বৈশিষ্ট্যের মান একটি নিয়মিত অভিব্যক্তি হিসাবে ব্যাখ্যা করা হয়। এই রেগুলার এক্সপ্রেশনের সাথে মেলে যেকোন আগে থেকে বিদ্যমান COPTS (বিধির copts অ্যাট্রিবিউটে স্পষ্টভাবে নির্দিষ্ট করা মান সহ) এই নিয়ম কম্পাইল করার উদ্দেশ্যে COPTS থেকে সরিয়ে দেওয়া হবে। এই বৈশিষ্ট্যটি খুব কমই প্রয়োজন হওয়া উচিত।
stamp

Integer; optional; default is 0

বাইনারিতে বিল্ড তথ্য এনকোড করা হবে কিনা। সম্ভাব্য মান:
  • stamp = 1 : সর্বদা বিল্ড তথ্যকে বাইনারিতে স্ট্যাম্প করুন, এমনকি --nostampএই সেটিংটি এড়ানো উচিত , কারণ এটি সম্ভাব্যভাবে বাইনারির জন্য দূরবর্তী ক্যাশিং এবং এটির উপর নির্ভরশীল যেকোনো ডাউনস্ট্রিম অ্যাকশনকে মেরে ফেলে।
  • stamp = 0 : সর্বদা ধ্রুবক মান দ্বারা বিল্ড তথ্য প্রতিস্থাপন করুন। এটি ভাল বিল্ড ফলাফল ক্যাশিং দেয়।
  • stamp = -1 : বিল্ড তথ্যের এম্বেডিং --[no]stamp পতাকা দ্বারা নিয়ন্ত্রিত হয়।

Stamped binaries are not rebuilt unless their dependencies change.

win_def_file

Label ; optional

The Windows DEF file to be passed to linker.

This attribute should only be used when Windows is the target platform. It can be used to export symbols during linking a shared library.

cc_toolchain

cc_toolchain(name, all_files, ar_files, as_files, compatible_with, compiler, compiler_files, compiler_files_without_includes, coverage_files, cpu, deprecation, distribs, dwp_files, dynamic_runtime_lib, exec_transition_for_inputs, features, libc_top, licenses, linker_files, module_map, objcopy_files, restricted_to, static_runtime_lib, strip_files, supports_header_parsing, supports_param_files, tags, target_compatible_with, testonly, toolchain_config, toolchain_identifier, visibility)

Represents a C++ toolchain.

This rule is responsible for:

  • Collecting all artifacts needed for C++ actions to run. This is done by attributes such as all_files , compiler_files , linker_files , or other attributes ending with _files ). These are most commonly filegroups globbing all required files.
  • Generating correct command lines for C++ actions. This is done using CcToolchainConfigInfo provider (details below).

Use toolchain_config attribute to configure the C++ toolchain. See also this page for elaborate C++ toolchain configuration and toolchain selection documentation.

Use tags = ["manual"] in order to prevent toolchains from being built and configured unnecessarily when invoking bazel build //...

Arguments

Attributes
name

Name ; required

A unique name for this target.

all_files

Label ; required

Collection of all cc_toolchain artifacts. These artifacts will be added as inputs to all rules_cc related actions (with the exception of actions that are using more precise sets of artifacts from attributes below). Bazel assumes that all_files is a superset of all other artifact-providing attributes (eg linkstamp compilation needs both compile and link files, so it takes all_files ).

This is what cc_toolchain.files contains, and this is used by all Starlark rules using C++ toolchain.

ar_files

Label ; optional

Collection of all cc_toolchain artifacts required for archiving actions.

as_files

Label ; optional

Collection of all cc_toolchain artifacts required for assembly actions.

compiler

String; optional; nonconfigurable

Deprecated. Use toolchain_identifier attribute instead. It will be a noop after CROSSTOOL migration to Starlark , and will be removed by #7075 .

When set, it will be used to perform crosstool_config.toolchain selection. It will take precedence over --cpu Bazel option.

compiler_files

Label ; required

Collection of all cc_toolchain artifacts required for compile actions.
compiler_files_without_includes

Label ; optional

Collection of all cc_toolchain artifacts required for compile actions in case when input discovery is supported (currently Google-only).
coverage_files

Label ; optional

Collection of all cc_toolchain artifacts required for coverage actions. If not specified, all_files are used.
cpu

String; optional; nonconfigurable

Deprecated. Use toolchain_identifier attribute instead. It will be a noop after CROSSTOOL migration to Starlark , and will be removed by #7075 .

When set, it will be used to perform crosstool_config.toolchain selection. It will take precedence over --cpu Bazel option.

dwp_files

Label ; required

Collection of all cc_toolchain artifacts required for dwp actions.
dynamic_runtime_lib

Label ; optional

Dynamic library artifact for the C++ runtime library (eg libstdc++.so).

This will be used when 'static_link_cpp_runtimes' feature is enabled, and we're linking dependencies dynamically.

exec_transition_for_inputs

Boolean; optional; default is True

Set to True to build all file inputs to cc_toolchain for the exec platform, instead of having no transition (ie target platform by default).
libc_top

Label ; optional

A collection of artifacts for libc passed as inputs to compile/linking actions.
linker_files

Label ; required

Collection of all cc_toolchain artifacts required for linking actions.
module_map

Label ; optional

Module map artifact to be used for modular builds.
objcopy_files

Label ; required

Collection of all cc_toolchain artifacts required for objcopy actions.
static_runtime_lib

Label ; optional

Static library artifact for the C++ runtime library (eg libstdc++.a).

This will be used when 'static_link_cpp_runtimes' feature is enabled, and we're linking dependencies statically.

strip_files

Label ; required

Collection of all cc_toolchain artifacts required for strip actions.
supports_header_parsing

Boolean; optional; default is False

Set to True when cc_toolchain supports header parsing actions.
supports_param_files

Boolean; optional; default is True

Set to True when cc_toolchain supports using param files for linking actions.
toolchain_config

Label ; required

The label of the rule providing cc_toolchain_config_info .
toolchain_identifier

String; optional; nonconfigurable

The identifier used to match this cc_toolchain with the corresponding crosstool_config.toolchain.

Until issue #5380 is fixed this is the recommended way of associating cc_toolchain with CROSSTOOL.toolchain . It will be replaced by the toolchain_config attribute ( #5380 ).

cc_toolchain_suite

cc_toolchain_suite(name, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

Represents a collections of C++ toolchains.

This rule is responsible for:

  • Collecting all relevant C++ toolchains.
  • Selecting one toolchain depending on --cpu and --compiler options passed to Bazel.

See also this page for elaborate C++ toolchain configuration and toolchain selection documentation.

Arguments

Attributes
name

Name ; required

A unique name for this target.

toolchains

Dictionary mapping strings to labels ; required; nonconfigurable

A map from "<cpu>" or "<cpu>|<compiler>" strings to a cc_toolchain label. "<cpu>" will be used when only --cpu is passed to Bazel, and "<cpu>|<compiler>" will be used when both --cpu and --compiler are passed to Bazel. Example:

          cc_toolchain_suite(
            name = "toolchain",
            toolchains = {
              "piii|gcc": ":my_cc_toolchain_for_piii_using_gcc",
              "piii": ":my_cc_toolchain_for_piii_using_default_compiler",
            },
          )