ادغام با قوانین ++C

در این صفحه نحوه ادغام با قوانین C++ در سطوح مختلف توضیح داده شده است.

دسترسی به زنجیره ابزار C++

به دلیل مهاجرت مداوم قوانین ++C به پلتفرم‌ها و زنجیره‌های ابزار، باید از تابع کمکی موجود در @bazel_tools//tools/cpp:toolchain_utils.bzl استفاده کنید، که هم زمانی که زنجیره‌های ابزار غیرفعال و هم فعال هستند، کار می‌کند. برای وابستگی به زنجیره ابزار C++ در قانون خود، یک ویژگی Label به نام _cc_toolchain اضافه کنید و آن را به @bazel_tools//tools/cpp:current_cc_toolchain (نمونه‌ای از قانون cc_toolchain_alias ، که به زنجیره ابزار C++ انتخاب شده اشاره می‌کند) قرار دهید. سپس، در اجرای قانون، از find_cpp_toolchain(ctx) برای دریافت CcToolchainInfo استفاده کنید. یک مثال کار کامل را می توان در نمونه های rules_cc یافت.

ایجاد خطوط فرمان و متغیرهای محیطی با استفاده از زنجیره ابزار C++

به طور معمول، شما می‌توانید با زنجیره ابزار C++ یکپارچه شوید تا پرچم‌های خط فرمان مشابه قوانین C++ را داشته باشید، اما بدون استفاده مستقیم از اقدامات C++. این به این دلیل است که هنگام نوشتن اکشن‌های خودمان، آن‌ها باید با زنجیره ابزار C++ رفتار کنند - برای مثال، پرچم‌های خط فرمان C++ را به ابزاری ارسال می‌کنند که کامپایلر C++ را در پشت صحنه فراخوانی می‌کند.

قوانین C++ از روش خاصی برای ساخت خطوط فرمان بر اساس پیکربندی ویژگی استفاده می کنند. برای ساخت یک خط فرمان به موارد زیر نیاز دارید:

هنوز گیرنده های مخصوص ابزار مانند compiler_executable وجود دارد. get_tool_for_action را به اینها ترجیح دهید، زیرا گیرنده های خاص ابزار در نهایت حذف خواهند شد.

یک مثال کار کامل را می توان در نمونه های rules_cc یافت.

اجرای قوانین Starlark که به قوانین C++ و/یا قوانین C++ می‌توانند به آن بستگی داشته باشند

اکثر قوانین ++C CcInfo را ارائه می‌کنند، ارائه‌دهنده‌ای حاوی CompilationContext و LinkingContext . از این طریق می توان به اطلاعاتی مانند تمام سرصفحه ها یا کتابخانه های انتقالی برای پیوند دسترسی پیدا کرد. قوانین CcToolchainInfo سفارشی از CcInfo و از CcToolchainInfo باید بتوانند تمام اطلاعات مورد نیاز خود را دریافت کنند.

اگر یک قانون سفارشی Starlark CcInfo را ارائه دهد، این یک سیگنال به قوانین C++ است که می‌توانند به آن وابسته باشند. با این حال، مراقب باشید - اگر فقط باید CcInfo را از طریق نمودار به قانون باینری که سپس از آن استفاده می‌کند منتشر کنید، CcInfo در ارائه‌دهنده دیگری قرار دهید. برای مثال، اگر قانون java_library می‌خواهد وابستگی‌های بومی را تا java_binary کند، نباید CcInfo را مستقیماً ارائه کند ( cc_binary بسته به java_library معنی ندارد)، باید آن را به عنوان مثال در JavaCcInfo قرار دهد.

یک مثال کار کامل را می توان در نمونه های rules_cc یافت.

استفاده مجدد از منطق و اعمال قوانین C++

هنوز پایدار نیست؛ این بخش پس از تثبیت API به روز می شود. برای اطلاعات به روز شماره 4570 را دنبال کنید.