C++ Kurallarıyla Entegrasyon

Sorun bildirme Kaynağı görüntüleme Nightly · 8.0 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Bu sayfada, C++ kurallarıyla çeşitli düzeylerde nasıl entegrasyon yapılacağı açıklanmaktadır.

C++ araç zincirine erişme

C++ kurallarının platformlara ve araç zincirlerine devam eden taşınması nedeniyle, @bazel_tools//tools/cpp:toolchain_utils.bzl adresinde bulunan yardımcı işlevi kullanmanız gerekir. Bu işlev, hem araç zincirleri devre dışıyken hem de etkinken çalışır. Kuralınızda bir C++ araç zincirine bağımlı olmak için _cc_toolchain adlı bir Label özelliği ekleyin ve bu özelliği @bazel_tools//tools/cpp:current_cc_toolchain'e (şu anda seçili C++ araç zincirini gösteren bir cc_toolchain_alias kuralı örneği) yönlendirin. Ardından, kural uygulama işleminde CcToolchainInfo değerini almak için find_cpp_toolchain(ctx) değerini kullanın. Çalışan tam bir örneği rules_cc örneklerinde bulabilirsiniz.

C++ araç zincirini kullanarak komut satırı ve ortam değişkenleri oluşturma

Genellikle, C++ kurallarıyla aynı komut satırı işaretlerine sahip olmak için C++ araç zinciriyle entegrasyon yaparsınız ancak doğrudan C++ işlemlerini kullanmazsınız. Bunun nedeni, kendi işlemlerimizi yazarken C++ araç zinciriyle tutarlı davranmaları gerektiğidir (ör. C++ komut satırı işaretlerini, arka planda C++ derleyicisini çağıran bir araca iletme).

C++ kuralları, özellik yapılandırmasına dayalı komut satırları oluşturmak için özel bir yöntem kullanır. Komut satırı oluşturmak için aşağıdakilere ihtiyacınız vardır:

compiler_executable gibi araca özgü alıcılara hâlâ ihtiyaç vardır. Araca özgü alıcı yöntemleri zaman içinde kaldırılacağından bu yöntemler yerine get_tool_for_action yöntemini tercih edin.

Çalışan tam bir örneği rules_cc örneklerinde bulabilirsiniz.

C++ kurallarına bağlı olan ve/veya C++ kurallarının bağlı olabileceği Starlark kuralları uygulama

Çoğu C++ kuralı, CompilationContext ve LinkingContext içeren bir sağlayıcı olan CcInfo sağlar. Bu kaynaklar aracılığıyla, tüm geçişli üstbilgi veya bağlanacak kütüphaneler gibi bilgilere erişilebilir. CcInfo ve CcToolchainInfo özel Starlark kuralları, ihtiyaç duydukları tüm bilgileri alabilmelidir.

Özel bir Starlark kuralı CcInfo sağlıyorsa C++ kurallarına bu kurala da güvenebilecekleri yönünde bir sinyal gönderilir. Ancak dikkatli olun. Yalnızca CcInfo değerini grafik üzerinden, daha sonra bu değeri kullanan ikili kurala yaymanız gerekiyorsa CcInfo değerini farklı bir sağlayıcıya sarın. Örneğin, java_library kuralı yerel bağımlılıkları java_binary'a kadar yaymak istiyorsa CcInfo'yi doğrudan sağlamamalıdır (java_library'e bağlı cc_binary anlamlı değildir), örneğin JavaCcInfo içine sarmalıdır.

Çalışan tam bir örneği rules_cc örneklerinde bulabilirsiniz.

C++ kurallarının mantığını ve işlemlerini yeniden kullanma

Henüz kararlı değil; API kararlı hale geldiğinde bu bölüm güncellenecektir. Güncel bilgiler için #4570 etiketini takip edin.