C++ Kurallarıyla Entegrasyon

Sorun bildir Kaynağı görüntüleyin Nightly · 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

Starlark kuralındaki bir CC araç zincirine bağlı olmak için @rules_cc//cc:find_cc_toolchain.bzl adresindeki yardımcı işlevleri kullanmanız gerekir.

Kuralınızda bir C++ araç zincirine bağımlı olmak için toolchains parametresini use_cc_toolchain() olarak ayarlayın. Ardından, kural uygulamada CcToolchainInfo almak için find_cpp_toolchain(ctx) kullanın. Eksiksiz bir çalışma örneğini rules_cc örneklerinde bulabilirsiniz.

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

Genellikle, C++ kurallarıyla aynı komut satırı işaretlerine sahip olmak için C++ araç setiyle 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ı olarak 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:

Yine de compiler_executable gibi araca özel alıcılar 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.

Eksiksiz bir çalışan örneği rules_cc örneklerinde bulunabilir.

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

Çoğu C++ kuralı, CompilationContext ve LinkingContext kelimelerini içeren bir sağlayıcı olan CcInfo değerini 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 öğesine yaymak isterse doğrudan CcInfo sağlamamalıdır (java_library öğesine bağlı olarak cc_binary bir anlam ifade etmez) ve sarmalamalıdır (örneğin, JavaCcInfo).

Ç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.