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:
features
veaction_configs
: BunlarCcToolchainConfigInfo
kaynağından gelir veCcToolchainInfo
içine yerleştirilir.FeatureConfiguration
: cc_common.configure_features tarafından döndürülür.- cc araç zinciri yapılandırma değişkenleri: cc_common.create_compile_variables veya cc_common.create_link_variables tarafından döndürülü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.