C / C++ Kuralları

Kurallar

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)

Dolaylı çıkış hedefleri

  • name.stripped (yalnızca açıkça istendiğinde oluşturulur): Sadeleştirilmiş sürümü de vardır. strip -g, hata ayıklamayı kaldırmak için ikili programda çalıştırılıyor anlamına gelir. Komut satırında ek şerit seçenekleri --stripopt=-foo Bu çıkış yalnızca açıkça istendiğinde oluşturulur.
  • name.dwp (yalnızca açıkça istendiğinde oluşturulur): Eğer Fission etkin: hata ayıklama Uzaktan dağıtılan ikili programlarda hata ayıklamaya uygun bilgi paketi dosyası. Diğer: anlamına gelir.

Bağımsız değişkenler

Özellikler
name

Name; required

Bu hedef için benzersiz bir ad.

deps

List of labels; optional

İkili hedefe bağlanacak diğer kitaplıkların listesi.

Bu URL'ler cc_library veya objc_library olabilir belirler.

srcs

List of labels; optional

Hedefi oluşturmak için işlenen C ve C++ dosyalarının listesi. Bunlar, oluşturulmamış (normal kaynak) kod) veya oluşturulmalıdır.

Tüm .cc, .c ve .cpp dosya derlenebilir. Bunlar oluşturulmuş dosyalar olabilir: adlandırılmış bir dosya başka bir kuralın outs, bu kural otomatik olarak diğer kurala bağlı olur.

.h dosyası derlenmese de aşağıda belirtilenler için kullanılabilir: bu kurala kaynaklara göre dahil edeceğim. Hem .cc hem de .h dosyaları doğrudan bu srcs veya hdrs içinde listelenen deps bağımsız değişkeni.

#included dosyanın tümünden bahsedilmelidir srcs özelliğinde veya Referans verilen cc_library() öğelerinin hdrs özelliği. Önerilen stil, kullanılacak bir kitaplıkla ilişkilendirilen hdrs özelliğinde listelenir ve bu kuralın kaynaklarıyla ilişkili başlıkları srcs. Bkz. "Üstbilgi dahil etme kontrolü" ziyaret edin.

Bir kuralın adı srcs içindeyse bu kural otomatik olarak ona bağlıdır. Adlandırılmış kuralın outs'leri C veya C++ ise bu kural kapsamında derlenirler; kitaplık dosyaları ise birbirine bağlanır.

İzin verilen srcs dosya türleri:

  • C ve C++ kaynak dosyaları: .c, .cc, .cpp, .cxx, .c++, .C
  • C ve C++ üstbilgi dosyaları: .h, .hh, .hpp, .hxx, .inc, .inl, .H
  • C ön işlemcili derleyici: .S
  • Arşiv: .a, .pic.a
  • "Her zaman bağla" kitaplık: .lo, .pic.lo
  • Paylaşılan kitaplık, sürümü olan veya sürümü değiştirilmiş: .so, .so.version
  • Nesne dosyası: .o, .pic.o

...ve bu dosyaları oluşturan kurallar. Farklı uzantılar, farklı programlama dillerini olduğunu unutmayın.

additional_linker_inputs

List of labels; optional

Bu dosyaları C++ bağlayıcı komutuna iletin.

Örneğin, derlenmiş Windows .res dosyaları buraya yerleştirilmek üzere ikili hedefi vardır.

copts

List of strings; optional

Bu seçenekleri C++ derleme komutuna ekleyin. "Değişken yap" değişikliğine tabi ve Bourne kabuk belirteçleme.

Bu özellikteki her dize, belirtilen sırayla COPTS öğesine eklenir. ikili hedef derleme. İşaretler yalnızca bu hedefi derlemek için geçerli olur, geçerli değildir bağımlılıklarını, bu yüzden başka bir yerde bulunan başlık dosyalarına dikkat edin. Tüm yollar geçerli paketle değil, çalışma alanıyla ilişkili olmasını sağlar.

Pakette özellik belirtilmişse no_copts_tokenization, Bourne kabuk belirteçlemesi yalnızca dizeler için geçerlidir tek bir "Marka"dan oluşan değişkenine eklenmelidir.

defines

List of strings; optional

Derleme satırına eklenecek tanımlar listesi. "Yap" konusuyla ilgili değişken yerine koyma ve Bourne kabuk belirteçleme. Tek bir Bourne kabuk jetonundan oluşması gereken dizeler başa -D eklenir ve bu hedefe yönelik derleme komut satırına eklenir, kurala bağlı olarak değişiklik gösterir. Bu tür sorunlarda neden olabileceği için etkileridir. Şüpheye düştüğünüzde, Bunun yerine local_defines.
includes

List of strings; optional

Derleme satırına eklenecek dizin dosyalarının listesi.

"Değişken yap" değişikliğine tabidir. Her dizenin başına -isystem değeri eklenir ve dize COPTS öğesine eklenir. COPTS'nin aksine, bu işaretler bu kural için eklenir ona bağlı tüm kuralları görebiliriz. (Not: Bu kuralların bağlı olduğu kurallar değildir.) geniş kapsamlı etkileri olabileceği için dikkatli olun. Şüpheye düştüğünüzde "-I" COPTS olarak işaretler.

Üstbilgiler src'lere veya hdrs'lara eklenmelidir, aksi takdirde bağımlı kullanıcılar tarafından kullanılamaz belirli kurallara tabi olacaktır (varsayılan).

linkopts

List of strings; optional

Bu işaretleri C++ bağlayıcı komutuna ekleyin. "Yap" konusuyla ilgili değişken yerine Bourne kabuk belirtkeleme ve etiket genişletme. Bu özellikteki her dize LINKOPTS öğesine, önüne çok önemlidir.

Bu listede $ veya - ile başlamayan her öğe deps bölgesindeki bir hedefin etiketi olduğu varsayılmıştır. İlgili içeriği oluşturmak için kullanılan söz konusu hedef tarafından oluşturulan dosyaların listesi bağlayıcıya eklenir seçenekleri vardır. Etiket geçersizse veya deps bölgesinde bildirilmedi.

linkshared

Boolean; optional; nonconfigurable; default is False

Paylaşılan kitaplık oluşturun. Bu özelliği etkinleştirmek için kuralınıza linkshared=True özelliğini ekleyin. Varsayılan olarak bu seçenek kapalıdır.

Bu işaretin varlığı, bağlantı işleminin -shared işaretiyle gerçekleştiği anlamına gelir gcc değerine oluşturulur ve ortaya çıkan paylaşılan kitaplık, bir örneği düşünün. Ancak, oluşturma amacıyla hiçbir zaman paylaşılan kitaplıkların cc_binary kuralı yalnızca diğer programlar tarafından manuel olarak yüklenir. Bu nedenle cc_library parametresinin yerine geçmemelidir kuralı. Ölçeklenebilirlik açısından bu yaklaşımdan tamamen kaçınmanızı ve java_library, cc_library kurallarına bağlı olsun .

Hem linkopts=['-static'] hem de linkshared=True öğesini belirtirseniz tamamen bağımsız bir birim elde edersiniz. Her ikisini de belirtirseniz linkstatic=True ve linkshared=True, çoğunlukla tek bir bağımsız birimdir.

linkstatic

Boolean; optional; default is True

cc_binary ve cc_test: İkili dosyayı statik yatırım yapmanız önemlidir. cc_library.linkstatic için: Aşağıya bakın.

Bu seçenek cc_binary için varsayılan olarak etkin, geri kalanı için devre dışıdır.

Etkinleştirilirse ve bu bir ikili program veya test ise bu seçenek, derleme aracına Mümkün olduğunda kullanıcı kitaplıkları için .so yerine .a kullanın. Bazı sistem kitaplıkları, dinamik olarak bağlanmaya devam edebilir. statik kitaplık yoktur. Bu nedenle, ortaya çıkan yürütülebilir dosya dinamik olarak bağlantılı, bu nedenle yalnızca çoğunlukla statiktir.

Yürütülebilir bir dosyayı bağlamanın üç farklı yolu vardır:

  • Her şeyin statik olarak bağlandığı full_static_link özelliğiyle STATIC; ör. "gcc -static foo.o libbar.a libbaz.a -lm".
    Bu mod, fully_static_link features özelliği ile birlikte kullanılabilir.
  • Tüm kullanıcı kitaplıklarının statik olarak bağlandığı STATIC ( sürümü mevcut), ancak sistem kitaplıkları (C/C++ çalışma zamanı kitaplıkları hariç) dinamik olarak bağlanır, ör. "gcc foo.o libfoo.a libbaz.a -lm".
    Bu mod, linkstatic=True belirtilerek etkinleştirilir.
  • Tüm kitaplıkların dinamik olarak bağlandığı DYNAMIC (dinamik sürüm kullanılabilir), ör. "gcc foo.o libfoo.so libbaz.so -lm".
    Bu mod, linkstatic=False belirtilerek etkinleştirilir.

linkstatic özelliği, cc_library() kuralı. Bir C++ kitaplığı için linkstatic=True, yalnızca statik bağlantıya izin verildiği için .so oluşturulmaz. linkstatic=Yanlış statik kitaplıkların oluşturulmasını engellemez. Özelliğin amacı, oluşturmayı öğreneceksiniz.

linkstatic=False ise derleme aracı *.runfiles alanındaki paylaşılan kitaplıklara aşina olmanız gerekir.

local_defines

List of strings; optional

Derleme satırına eklenecek tanımlar listesi. "Yap" konusuyla ilgili değişken yerine koyma ve Bourne kabuk belirteçleme. Tek bir Bourne kabuk jetonundan oluşması gereken dizeler başa -D eklenir ve bu hedef için derleme komut satırına eklenir, ancak muhteliflerine değil.
malloc

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

Malloc'daki varsayılan bağımlılığı geçersiz kılın.

Varsayılan olarak, C++ ikili programları //tools/cpp:malloc ile bu boş bir kitaplıktır. Bu nedenle ikili program, libc Malloc'u kullanır. Bu etiket bir cc_library değerine başvuruda bulunmalıdır. Derleme C++ olmayan bir bu seçeneğin hiçbir etkisi yoktur. Aşağıdaki durumlarda bu özelliğin değeri yoksayılır: linkshared=True belirtilmişse.

nocopts

String; optional

C++ derleme komutundan eşleşme seçeneklerini kaldırın. "Yap" konusuyla ilgili değişkeni ikame değerleridir. Bu özelliğin değeri normal ifade olarak yorumlanır. Bu normal ifadeyle eşleşen önceden mevcut tüm COPTS (kuralın copts özelliğinde açıkça belirtilen değerler dahil olmak üzere), COPTS. Bu özelliğe nadiren ihtiyaç duyulur.
stamp

Integer; optional; default is -1

Derleme bilgilerinin ikili programda kodlanıp kodlanmayacağını belirler. Olası değerler:
  • stamp = 1: Derleme bilgilerini --nostamp derleme. Bu ayarından kaçınılmalıdır. Aksi takdirde, bu işlem ve buna bağımlı tüm aşağı akış işlemleri.
  • stamp = 0: Derleme bilgilerini her zaman sabit değerlerle değiştirin. Bu iyi bir derleme sonucu önbelleğe alma sağlar.
  • stamp = -1: Derleme bilgilerinin yerleştirilmesi --[no]stamp işaretidir.

Bağımlılıkları değişmediği sürece damgalı ikili programlar yeniden oluşturulmaz.

win_def_file

Label; optional

Bağlayıcıya iletilecek Windows DEF dosyası.

Bu özellik yalnızca hedef platform Windows olduğunda kullanılmalıdır. Şu amaçlarla kullanılabilir: simgeleri dışa aktarın.

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 kuralları, kullanıcıların önceden derlenmiş C/C++ kitaplıklarını içe aktarmasına olanak tanır.

Tipik kullanım alanları şunlardır:
1. Statik kitaplık bağlama

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. Paylaşılan bir kitaplığı bağlama (Unix)
cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  shared_library = "libmylib.so",
)
3. Paylaşılan bir kitaplığı arayüz kitaplığıyla bağlama (Windows)
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",
)
5. Paylaşılan bir kitaplığı system_provided=True (Windows) ile bağlama
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.c
adlı statik veya paylaşılan kitaplığa bağlanılıyor Unix'te:
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,
)
Windows'da:
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,
)

Bağımsız değişkenler

Özellikler
name

Name; required

Bu hedef için benzersiz bir ad.

hdrs

List of labels; optional

tarafından yayınlanan üstbilgi dosyalarının listesi bu önceden derlenmiş kitaplığın bağımlı kurallardaki kaynaklar tarafından doğrudan dahil edilmesini sağlar.

Boolean; optional; default is False

1 ise, bu C++ değerine (doğrudan veya dolaylı olarak) bağlı herhangi bir ikili program önceden derlenmiş kitaplık, statik kitaplıkta arşivlenen tüm nesne dosyalarına bağlantı verir. hatta bazıları ikili program tarafından başvurulan semboller içermese bile kullanılabilir. Bu, kodunuz yalnızca dil tercihinde kod tarafından kodu alır. Örneğin, kodunuz bir geri çağırma işlemi almak için kaydedilir bir hizmet tarafından sağlanır.

Windows'da her zamanlink özelliği 2017 sürümüne göre çalışmıyorsa bunun nedeni bilinen bir sorun yoksa lütfen 2017 ile sürümünüzü en son sürüme yükseltin.

interface_library

Label; optional

Paylaşılan kitaplığı bağlamak için tek bir arayüz kitaplığı.

İzin verilen dosya türleri: .ifso, .tbd, .lib, .so veya .dylib

shared_library

Label; optional

Önceden derlenmiş tek bir paylaşılan kitaplık. Bazel, dosyanın ona bağımlı bir ikili programdır.

İzin verilen dosya türleri: .so, .dll veya .dylib

static_library

Label; optional

Önceden derlenmiş tek bir statik kitaplık.

İzin verilen dosya türleri: .a, .pic.a veya .lib

system_provided

Boolean; optional; default is False

1 ise, çalışma zamanında gerekli olan paylaşılan kitaplığın sistem tarafından sağlandığını belirtir. İçinde bu örnekte, interface_library belirtilmeli ve shared_library boş olmalıdır.

cc_library

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)

Üstbilgi dahil etme kontrolü

Derlemede kullanılan tüm başlık dosyaları hdrs veya srcs / cc_* kural. Zorunlu kılınır.

cc_library kuralları için hdrs içindeki başlıklar, şu öğenin herkese açık arayüzünü oluşturur: yer alır ve hem hdrs hem de hdrs klasöründeki dosyalardan doğrudan eklenebilir ve kitaplığın kendisinden srcs tanesinin yanı sıra hdrs ve Kitaplığı deps içinde listeleyen cc_* kuraldan srcs tanesi. srcs öğesindeki başlıklar yalnızca hdrs klasöründeki dosyalardan doğrudan eklenmelidir ve kitaplığın srcs kadarına yer veriliyor. Bir başlığın web sayfasının hdrs veya srcs için bu kitaplığın tüketicilerini isteyip istemediğinizi sormalısınız. bunu doğrudan dahil edebilirsiniz. Bu, diğer tedarikçilerle yaklaşık olarak Programlama dillerinde public ve private görünürlük.

cc_binary ve cc_test kurallarının dışa aktarılmış bir arayüzü olmadığından ayrıca hdrs özelliğine sahip değil. İkili program veya teste ait tüm başlıklar doğrudan srcs içinde listelenmelidir.

Bu kuralları görmek için aşağıdaki örneğe bakın.

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"],
)

Bu örnekte izin verilen doğrudan dahil etmeler aşağıdaki tabloda listelenmiştir. Örneğin: foo.cc öğesinin foo.h ve bar.h öğelerini doğrudan içermesine izin verilir, ancak baz.h değil.

Dosya dahilİzin verilen dahil etmeler
foo.hbar.h
foo.ccfoo.h bar.h
bar.hbar-impl.h baz.h
çubuk-impl.hbar.h baz.h
bar.ccbar.h bar-impl.h baz.h
baz.hbaz-impl.h
baz-impl.hbaz.h
baz.ccbaz.h baz-impl.h

Dahil olma kontrolü kuralları yalnızca doğrudan reklamlar için geçerlidir dahil edilir. Yukarıdaki örnekte foo.cc için izin verilen: dahil olmak üzere bar.h, dahil olmak üzere baz.h dönüşün baz-impl.h içermesine izin verilir. Teknik olarak, .cc dosyası derlemesi, geçişli olarak herhangi bir başlığı içerebilir hdrs veya srcs içinde Geçişli deps kapatmasındaki herhangi bir cc_library. İçinde bu durumda derleyici baz.h ve baz-impl.h verilerini okuyabilir foo.cc derlenirken, ancak foo.cc şunu içermemelidir: #include "baz.h" içerir. Bunun için izin verildi, deps öğesine baz eklenmelidir / foo.

Maalesef Bazel şu anda doğrudan ve geçişli arasında ayrım yapamaz bir dosyada yasa dışı bir şekilde geçişli olarak eklenmesine izin verilen doğrudan üstbilgiyi içerir. Örneğin, Bazel yukarıdaki örnekte doğrudan foo.cc baz.h dahildir. Bu yasa dışıdır çünkü foo baz ile doğrudan bağlı değildir. Şu anda herhangi bir hata oluşturulmadı ancak bu durumda bu tür hata kontrolleri ileride eklenebilir.

Bağımsız değişkenler

Özellikler
name

Name; required

Bu hedef için benzersiz bir ad.

deps

List of labels; optional

İkili hedefe bağlanacak diğer kitaplıkların listesi.

Bu URL'ler cc_library veya objc_library olabilir belirler.

srcs

List of labels; optional

Hedefi oluşturmak için işlenen C ve C++ dosyalarının listesi. Bunlar, oluşturulmamış (normal kaynak) kod) veya oluşturulmalıdır.

Tüm .cc, .c ve .cpp dosya derlenebilir. Bunlar oluşturulmuş dosyalar olabilir: adlandırılmış bir dosya başka bir kuralın outs, bu kural otomatik olarak diğer kurala bağlı olur.

.h dosyası derlenmese de aşağıda belirtilenler için kullanılabilir: bu kurala kaynaklara göre dahil edeceğim. Hem .cc hem de .h dosyaları doğrudan bu srcs veya hdrs içinde listelenen deps bağımsız değişkeni.

#included dosyanın tümünden bahsedilmelidir srcs özelliğinde veya Referans verilen cc_library() öğelerinin hdrs özelliği. Önerilen stil, kullanılacak bir kitaplıkla ilişkilendirilen hdrs özelliğinde listelenir ve bu kuralın kaynaklarıyla ilişkili başlıkları srcs. Bkz. "Üstbilgi dahil etme kontrolü" ziyaret edin.

Bir kuralın adı srcs içindeyse bu kural otomatik olarak ona bağlıdır. Adlandırılmış kuralın outs'leri C veya C++ ise bu kural kapsamında derlenirler; kitaplık dosyaları ise birbirine bağlanır.

İzin verilen srcs dosya türleri:

  • C ve C++ kaynak dosyaları: .c, .cc, .cpp, .cxx, .c++, .C
  • C ve C++ üstbilgi dosyaları: .h, .hh, .hpp, .hxx, .inc, .inl, .H
  • C ön işlemcili derleyici: .S
  • Arşiv: .a, .pic.a
  • "Her zaman bağla" kitaplık: .lo, .pic.lo
  • Paylaşılan kitaplık, sürümü olan veya sürümü değiştirilmiş: .so, .so.version
  • Nesne dosyası: .o, .pic.o

...ve bu dosyaları oluşturan kurallar. Farklı uzantılar, farklı programlama dillerini olduğunu unutmayın.

hdrs

List of labels; optional

tarafından yayınlanan üstbilgi dosyalarının listesi bu kitaplığın bağımlı kurallardaki kaynaklar tarafından doğrudan dahil edilmesini sağlar.

Bu, şuna benzeyen başlık dosyalarını bildirmek için kesinlikle tercih edilen konumdur: kitaplığın arayüzünü tarif eder. Bu başlıklar, bu kurala kaynaklar tarafından veya bağımlı kurallara dahil edilebilir. Bu kitaplığın bir istemcisi tarafından eklenmesi amaçlanmayan başlıklar srcs özelliğinde listelenmiş olsa bile yayınlanan bir üstbilgi tarafından dahil edilir. Bkz. "Üstbilgi dahil etme kontrol etme" bölümüne bakın.

Boolean; optional; default is False

1 ise, bu C++ değerine (doğrudan veya dolaylı olarak) bağlı herhangi bir ikili program kitaplığının, listelenen dosyalar için tüm nesne dosyalarına srcs (bazıları ikili program tarafından başvurulan semboller içermese bile). Bu, kodunuz yalnızca dil tercihinde kod tarafından kodu alır. Örneğin, kodunuz bir geri çağırma işlemi almak için kaydedilir bir hizmet tarafından sağlanır.

Windows'da her zamanlink özelliği 2017 sürümüne göre çalışmıyorsa bunun nedeni bilinen bir sorun yoksa lütfen 2017 ile sürümünüzü en son sürüme yükseltin.

copts

List of strings; optional

Bu seçenekleri C++ derleme komutuna ekleyin. "Değişken yap" değişikliğine tabi ve Bourne kabuk belirteçleme.

Bu özellikteki her dize, belirtilen sırayla COPTS öğesine eklenir. ikili hedef derleme. İşaretler yalnızca bu hedefi derlemek için geçerli olur, geçerli değildir bağımlılıklarını, bu yüzden başka bir yerde bulunan başlık dosyalarına dikkat edin. Tüm yollar geçerli paketle değil, çalışma alanıyla ilişkili olmasını sağlar.

Pakette özellik belirtilmişse no_copts_tokenization, Bourne kabuk belirteçlemesi yalnızca dizeler için geçerlidir tek bir "Marka"dan oluşan değişkenine eklenmelidir.

defines

List of strings; optional

Derleme satırına eklenecek tanımlar listesi. "Yap" konusuyla ilgili değişken yerine koyma ve Bourne kabuk belirteçleme. Tek bir Bourne kabuk jetonundan oluşması gereken dizeler başa -D eklenir ve bu hedefe yönelik derleme komut satırına eklenir, kurala bağlı olarak değişiklik gösterir. Bu tür sorunlarda neden olabileceği için etkileridir. Şüpheye düştüğünüzde, Bunun yerine local_defines.
implementation_deps

List of labels; optional

Kitaplığın hedeflediği diğer kitaplıkların listesi. Şununla beğenme: deps, üstbilgilerini içerir ve bu kitaplıkların (ve tüm geçişli dep'ler) yalnızca bu kitaplığın derlenmesi için kullanılır, ona güvenmeniz gerekir. implementation_deps ile belirtilen kitaplıklar hâlâ şurada bağlı: ikili hedefleridir.

Kullanım şimdilik cc_libraries ile sınırlıdır ve bayrak ile korunur --experimental_cc_implementation_deps

include_prefix

String; optional

Bu kuralın başlıklarının yollarına eklenecek ön ek.

Ayarlandığında, bu kuralın hdrs özelliğindeki başlıklar erişilebilir olur , bu özelliğin depoya bağlı yolunun başına eklenen değeridir.

strip_include_prefix özelliğindeki ön ek bu değerden önce kaldırıldı öneki eklendi.

includes

List of strings; optional

Derleme satırına eklenecek dizin dosyalarının listesi.

"Değişken yap" değişikliğine tabidir. Her dizenin başına -isystem değeri eklenir ve dize COPTS öğesine eklenir. COPTS'nin aksine, bu işaretler bu kural için eklenir ona bağlı tüm kuralları görebiliriz. (Not: Bu kuralların bağlı olduğu kurallar değildir.) geniş kapsamlı etkileri olabileceği için dikkatli olun. Şüpheye düştüğünüzde "-I" COPTS olarak işaretler.

Üstbilgiler src'lere veya hdrs'lara eklenmelidir, aksi takdirde bağımlı kullanıcılar tarafından kullanılamaz belirli kurallara tabi olacaktır (varsayılan).

linkopts

List of strings; optional

Bu işaretleri C++ bağlayıcı komutuna ekleyin. "Yap" konusuyla ilgili değişken yerine Bourne kabuk belirtkeleme ve etiket genişletme. Bu özellikteki her dize LINKOPTS öğesine, önüne çok önemlidir.

Bu listede $ veya - ile başlamayan her öğe deps bölgesindeki bir hedefin etiketi olduğu varsayılmıştır. İlgili içeriği oluşturmak için kullanılan söz konusu hedef tarafından oluşturulan dosyaların listesi bağlayıcıya eklenir seçenekleri vardır. Etiket geçersizse veya deps bölgesinde bildirilmedi.

linkstamp

Label; optional

Belirtilen C++ kaynak dosyasını aynı anda derler ve ikilik. Bu hile, zaman damgası eklemek için gereklidir. bilgileri ikili programlara dönüştürme; kaynak dosyayı nesne dosyanız olursa zaman damgası yanlış olur. Bir bağlantı damgası derlemesi, emin olun. Bu nedenle, herhangi bir özel işarete veya başka bir derleme değişkeni kullanabilirsiniz. Bu seçenek yalnızca base paketi.
linkstatic

Boolean; optional; default is False

cc_binary ve cc_test: İkili dosyayı statik yatırım yapmanız önemlidir. cc_library.linkstatic için: Aşağıya bakın.

Bu seçenek cc_binary için varsayılan olarak etkin, geri kalanı için devre dışıdır.

Etkinleştirilirse ve bu bir ikili program veya test ise bu seçenek, derleme aracına Mümkün olduğunda kullanıcı kitaplıkları için .so yerine .a kullanın. Bazı sistem kitaplıkları, dinamik olarak bağlanmaya devam edebilir. statik kitaplık yoktur. Bu nedenle, ortaya çıkan yürütülebilir dosya dinamik olarak bağlantılı, bu nedenle yalnızca çoğunlukla statiktir.

Yürütülebilir bir dosyayı bağlamanın üç farklı yolu vardır:

  • Her şeyin statik olarak bağlandığı full_static_link özelliğiyle STATIC; ör. "gcc -static foo.o libbar.a libbaz.a -lm".
    Bu mod, fully_static_link features özelliği ile birlikte kullanılabilir.
  • Tüm kullanıcı kitaplıklarının statik olarak bağlandığı STATIC ( sürümü mevcut), ancak sistem kitaplıkları (C/C++ çalışma zamanı kitaplıkları hariç) dinamik olarak bağlanır, ör. "gcc foo.o libfoo.a libbaz.a -lm".
    Bu mod, linkstatic=True belirtilerek etkinleştirilir.
  • Tüm kitaplıkların dinamik olarak bağlandığı DYNAMIC (dinamik sürüm kullanılabilir), ör. "gcc foo.o libfoo.so libbaz.so -lm".
    Bu mod, linkstatic=False belirtilerek etkinleştirilir.

linkstatic özelliği, cc_library() kuralı. Bir C++ kitaplığı için linkstatic=True, yalnızca statik bağlantıya izin verildiği için .so oluşturulmaz. linkstatic=Yanlış statik kitaplıkların oluşturulmasını engellemez. Özelliğin amacı, oluşturmayı öğreneceksiniz.

linkstatic=False ise derleme aracı *.runfiles alanındaki paylaşılan kitaplıklara aşina olmanız gerekir.

local_defines

List of strings; optional

Derleme satırına eklenecek tanımlar listesi. "Yap" konusuyla ilgili değişken yerine koyma ve Bourne kabuk belirteçleme. Tek bir Bourne kabuk jetonundan oluşması gereken dizeler başa -D eklenir ve bu hedef için derleme komut satırına eklenir, ancak muhteliflerine değil.
nocopts

String; optional

C++ derleme komutundan eşleşme seçeneklerini kaldırın. "Yap" konusuyla ilgili değişkeni ikame değerleridir. Bu özelliğin değeri normal ifade olarak yorumlanır. Bu normal ifadeyle eşleşen önceden mevcut tüm COPTS (kuralın copts özelliğinde açıkça belirtilen değerler dahil olmak üzere), COPTS. Bu özelliğe nadiren ihtiyaç duyulur.
strip_include_prefix

String; optional

Bu kuralın üstbilgilerinin yollarından çıkarılacak ön ek.

Ayarlandığında, bu kuralın hdrs özelliğindeki başlıklar erişilebilir olur bu ön eki keserek yapar.

Göreli bir yolsa, pakete bağlı bir yol olarak alınır. Mutlak bir çözümse depoya bağlı bir yol olarak kabul edilir.

include_prefix özelliğindeki ön ek, şu ön ekten sonra eklenir: soyutlanır.

textual_hdrs

List of labels; optional

tarafından yayınlanan üstbilgi dosyalarının listesi bu kitaplık, bağımlı kurallardaki kaynaklar tarafından metin olarak eklenecek.

Bu, kendi başlarına derlanamayan üstbilgi dosyalarının bildirildiği konumdur; diğer kaynak dosyalara metin olarak eklenmeleri gerekir. girin.

win_def_file

Label; optional

Bağlayıcıya iletilecek Windows DEF dosyası.

Bu özellik yalnızca hedef platform Windows olduğunda kullanılmalıdır. Şu amaçlarla kullanılabilir: simgeleri dışa aktarın.

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 dosyadan C++ kodu oluşturur.

deps, proto_library kuralına işaret etmelidir.

Örnek:

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

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

proto_library(
    name = "foo_proto",
)

Bağımsız değişkenler

Özellikler
name

Name; required

Bu hedef için benzersiz bir ad.

deps

List of labels; optional

proto_library listesi kuralları belirlemeniz gerekir.

fdo_prefetch_hints

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

Çalışma alanında veya belirtilen bir FDO önceden getirme ipucu profilini temsil eder mutlak yol. Örnekler:

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

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

Bağımsız değişkenler

Özellikler
name

Name; required

Bu hedef için benzersiz bir ad.

profile

Label; optional

İpuçları profilinin etiketi. İpucu dosyası .afdo uzantısına sahiptir Etiket ayrıca bir fdo_Mutlak_path_profile kuralına da işaret edebilir.

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)

Çalışma alanında veya belirtilen mutlak yoldaki bir FDO profilini temsil eder. Örnekler:

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

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

Bağımsız değişkenler

Özellikler
name

Name; required

Bu hedef için benzersiz bir ad.

absolute_path_profile

String; optional

FDO profilinin mutlak yolu. FDO dosyası yalnızca .afdo uzantısına sahip olabilir.
profile

Label; optional

FDO profilinin veya onu oluşturan kuralın etiketi. FDO dosyasında şu uzantılardan yararlanabilirsiniz: dizine eklenmemiş LLVM profili için .profraw, dizine eklenmiş LLVM için .profdata profil, LLVM profraw profiline sahip .zip, AutoFDO profili için .afdo, için .xfdo XBinary profili. Etiket ayrıca bir fdo_Mutlak_path_profile kuralına da işaret edebilir.
proto_profile

Label; optional

Protobuf profilinin etiketi.

propeller_optimize

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

Çalışma alanında bir Pervane optimizasyon profilini temsil eder. Örnek:

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"
)

Bağımsız değişkenler

Özellikler
name

Name; required

Bu hedef için benzersiz bir ad.

ld_profile

Label; optional

Bağlantı işlemine iletilen profilin etiketi. Bu dosyada .txt uzantısıdır.

cc_test

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)

Bağımsız değişkenler

Özellikler
name

Name; required

Bu hedef için benzersiz bir ad.

deps

List of labels; optional

İkili hedefe bağlanacak diğer kitaplıkların listesi.

Bu URL'ler cc_library veya objc_library olabilir belirler.

srcs

List of labels; optional

Hedefi oluşturmak için işlenen C ve C++ dosyalarının listesi. Bunlar, oluşturulmamış (normal kaynak) kod) veya oluşturulmalıdır.

Tüm .cc, .c ve .cpp dosya derlenebilir. Bunlar oluşturulmuş dosyalar olabilir: adlandırılmış bir dosya başka bir kuralın outs, bu kural otomatik olarak diğer kurala bağlı olur.

.h dosyası derlenmese de aşağıda belirtilenler için kullanılabilir: bu kurala kaynaklara göre dahil edeceğim. Hem .cc hem de .h dosyaları doğrudan bu srcs veya hdrs içinde listelenen deps bağımsız değişkeni.

#included dosyanın tümünden bahsedilmelidir srcs özelliğinde veya Referans verilen cc_library() öğelerinin hdrs özelliği. Önerilen stil, kullanılacak bir kitaplıkla ilişkilendirilen hdrs özelliğinde listelenir ve bu kuralın kaynaklarıyla ilişkili başlıkları srcs. Bkz. "Üstbilgi dahil etme kontrolü" ziyaret edin.

Bir kuralın adı srcs içindeyse bu kural otomatik olarak ona bağlıdır. Adlandırılmış kuralın outs'leri C veya C++ ise bu kural kapsamında derlenirler; kitaplık dosyaları ise birbirine bağlanır.

İzin verilen srcs dosya türleri:

  • C ve C++ kaynak dosyaları: .c, .cc, .cpp, .cxx, .c++, .C
  • C ve C++ üstbilgi dosyaları: .h, .hh, .hpp, .hxx, .inc, .inl, .H
  • C ön işlemcili derleyici: .S
  • Arşiv: .a, .pic.a
  • "Her zaman bağla" kitaplık: .lo, .pic.lo
  • Paylaşılan kitaplık, sürümü olan veya sürümü değiştirilmiş: .so, .so.version
  • Nesne dosyası: .o, .pic.o

...ve bu dosyaları oluşturan kurallar. Farklı uzantılar, farklı programlama dillerini olduğunu unutmayın.

additional_linker_inputs

List of labels; optional

Bu dosyaları C++ bağlayıcı komutuna iletin.

Örneğin, derlenmiş Windows .res dosyaları buraya yerleştirilmek üzere ikili hedefi vardır.

copts

List of strings; optional

Bu seçenekleri C++ derleme komutuna ekleyin. "Değişken yap" değişikliğine tabi ve Bourne kabuk belirteçleme.

Bu özellikteki her dize, belirtilen sırayla COPTS öğesine eklenir. ikili hedef derleme. İşaretler yalnızca bu hedefi derlemek için geçerli olur, geçerli değildir bağımlılıklarını, bu yüzden başka bir yerde bulunan başlık dosyalarına dikkat edin. Tüm yollar geçerli paketle değil, çalışma alanıyla ilişkili olmasını sağlar.

Pakette özellik belirtilmişse no_copts_tokenization, Bourne kabuk belirteçlemesi yalnızca dizeler için geçerlidir tek bir "Marka"dan oluşan değişkenine eklenmelidir.

defines

List of strings; optional

Derleme satırına eklenecek tanımlar listesi. "Yap" konusuyla ilgili değişken yerine koyma ve Bourne kabuk belirteçleme. Tek bir Bourne kabuk jetonundan oluşması gereken dizeler başa -D eklenir ve bu hedefe yönelik derleme komut satırına eklenir, kurala bağlı olarak değişiklik gösterir. Bu tür sorunlarda neden olabileceği için etkileridir. Şüpheye düştüğünüzde, Bunun yerine local_defines.
includes

List of strings; optional

Derleme satırına eklenecek dizin dosyalarının listesi.

"Değişken yap" değişikliğine tabidir. Her dizenin başına -isystem değeri eklenir ve dize COPTS öğesine eklenir. COPTS'nin aksine, bu işaretler bu kural için eklenir ona bağlı tüm kuralları görebiliriz. (Not: Bu kuralların bağlı olduğu kurallar değildir.) geniş kapsamlı etkileri olabileceği için dikkatli olun. Şüpheye düştüğünüzde "-I" COPTS olarak işaretler.

Üstbilgiler src'lere veya hdrs'lara eklenmelidir, aksi takdirde bağımlı kullanıcılar tarafından kullanılamaz belirli kurallara tabi olacaktır (varsayılan).

linkopts

List of strings; optional

Bu işaretleri C++ bağlayıcı komutuna ekleyin. "Yap" konusuyla ilgili değişken yerine Bourne kabuk belirtkeleme ve etiket genişletme. Bu özellikteki her dize LINKOPTS öğesine, önüne çok önemlidir.

Bu listede $ veya - ile başlamayan her öğe deps bölgesindeki bir hedefin etiketi olduğu varsayılmıştır. İlgili içeriği oluşturmak için kullanılan söz konusu hedef tarafından oluşturulan dosyaların listesi bağlayıcıya eklenir seçenekleri vardır. Etiket geçersizse veya deps bölgesinde bildirilmedi.

linkstatic

Boolean; optional; default is False

cc_binary ve cc_test: İkili dosyayı statik yatırım yapmanız önemlidir. cc_library.linkstatic için: Aşağıya bakın.

Bu seçenek cc_binary için varsayılan olarak etkin, geri kalanı için devre dışıdır.

Etkinleştirilirse ve bu bir ikili program veya test ise bu seçenek, derleme aracına Mümkün olduğunda kullanıcı kitaplıkları için .so yerine .a kullanın. Bazı sistem kitaplıkları, dinamik olarak bağlanmaya devam edebilir. statik kitaplık yoktur. Bu nedenle, ortaya çıkan yürütülebilir dosya dinamik olarak bağlantılı, bu nedenle yalnızca çoğunlukla statiktir.

Yürütülebilir bir dosyayı bağlamanın üç farklı yolu vardır:

  • Her şeyin statik olarak bağlandığı full_static_link özelliğiyle STATIC; ör. "gcc -static foo.o libbar.a libbaz.a -lm".
    Bu mod, fully_static_link features özelliği ile birlikte kullanılabilir.
  • Tüm kullanıcı kitaplıklarının statik olarak bağlandığı STATIC ( sürümü mevcut), ancak sistem kitaplıkları (C/C++ çalışma zamanı kitaplıkları hariç) dinamik olarak bağlanır, ör. "gcc foo.o libfoo.a libbaz.a -lm".
    Bu mod, linkstatic=True belirtilerek etkinleştirilir.
  • Tüm kitaplıkların dinamik olarak bağlandığı DYNAMIC (dinamik sürüm kullanılabilir), ör. "gcc foo.o libfoo.so libbaz.so -lm".
    Bu mod, linkstatic=False belirtilerek etkinleştirilir.

linkstatic özelliği, cc_library() kuralı. Bir C++ kitaplığı için linkstatic=True, yalnızca statik bağlantıya izin verildiği için .so oluşturulmaz. linkstatic=Yanlış statik kitaplıkların oluşturulmasını engellemez. Özelliğin amacı, oluşturmayı öğreneceksiniz.

linkstatic=False ise derleme aracı *.runfiles alanındaki paylaşılan kitaplıklara aşina olmanız gerekir.

local_defines

List of strings; optional

Derleme satırına eklenecek tanımlar listesi. "Yap" konusuyla ilgili değişken yerine koyma ve Bourne kabuk belirteçleme. Tek bir Bourne kabuk jetonundan oluşması gereken dizeler başa -D eklenir ve bu hedef için derleme komut satırına eklenir, ancak muhteliflerine değil.
malloc

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

Malloc'daki varsayılan bağımlılığı geçersiz kılın.

Varsayılan olarak, C++ ikili programları //tools/cpp:malloc ile bu boş bir kitaplıktır. Bu nedenle ikili program, libc Malloc'u kullanır. Bu etiket bir cc_library değerine başvuruda bulunmalıdır. Derleme C++ olmayan bir bu seçeneğin hiçbir etkisi yoktur. Aşağıdaki durumlarda bu özelliğin değeri yoksayılır: linkshared=True belirtilmişse.

nocopts

String; optional

C++ derleme komutundan eşleşme seçeneklerini kaldırın. "Yap" konusuyla ilgili değişkeni ikame değerleridir. Bu özelliğin değeri normal ifade olarak yorumlanır. Bu normal ifadeyle eşleşen önceden mevcut tüm COPTS (kuralın copts özelliğinde açıkça belirtilen değerler dahil olmak üzere), COPTS. Bu özelliğe nadiren ihtiyaç duyulur.
stamp

Integer; optional; default is 0

Derleme bilgilerinin ikili programda kodlanıp kodlanmayacağını belirler. Olası değerler:
  • stamp = 1: Derleme bilgilerini --nostamp derleme. Bu ayarından kaçınılmalıdır. Aksi takdirde, bu işlem ve buna bağımlı tüm aşağı akış işlemleri.
  • stamp = 0: Derleme bilgilerini her zaman sabit değerlerle değiştirin. Bu iyi bir derleme sonucu önbelleğe alma sağlar.
  • stamp = -1: Derleme bilgilerinin yerleştirilmesi --[no]stamp işaretidir.

Bağımlılıkları değişmediği sürece damgalı ikili programlar yeniden oluşturulmaz.

win_def_file

Label; optional

Bağlayıcıya iletilecek Windows DEF dosyası.

Bu özellik yalnızca hedef platform Windows olduğunda kullanılmalıdır. Şu amaçlarla kullanılabilir: simgeleri dışa aktarın.

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)

C++ araç zincirini temsil eder.

Bu kural şunlardan sorumludur:

  • C++ işlemlerinin çalışması için gereken tüm yapılar toplanıyor. Bu, all_files, compiler_files, linker_files veya _files ile biten diğer özellikler). Bunlar: tüm gerekli dosyaları globbing eden dosya gruplarıdır.
  • C++ işlemleri için doğru komut satırları oluşturma. Bu, CcToolchainConfigInfo sağlayıcısı (ayrıntılar aşağıdadır).

C++ araç zincirini yapılandırmak için toolchain_config özelliğini kullanın. Şuna da bakın: sayfa inceleyin.

Araç zincirlerinin derlenmesini ve yapılandırılmasını engellemek için tags = ["manual"] kullanın bazel build //... çağrılırken gereksiz

Bağımsız değişkenler

Özellikler
name

Name; required

Bu hedef için benzersiz bir ad.

all_files

Label; required

Tüm cc_toolchain yapılarının koleksiyonu. Bu yapılar tüm rules_cc ile ilgili işlemler (daha hassas kümeler kullanan işlemler hariç yapıları) ayırmanızı sağlar. Bazel, all_files öğesinin bir üst küme olduğunu varsayar diğer tüm yapı sağlayan özelliklerin (ör. linkstamp derlemesinin her ikisinin de derlenmesi gerekiyor) ve dosya bağlayacağınız için bu işlem all_files sürer).

cc_toolchain.files bunu içerir ve tüm Starlark tarafından kullanılır kuralları tekrar gözden geçirelim.

ar_files

Label; optional

Arşivleme işlemleri için gereken tüm cc_toolchain yapılarının koleksiyonu.

as_files

Label; optional

Montaj işlemleri için gereken tüm cc_toolchain yapılarının koleksiyonu.

compiler

String; optional; nonconfigurable

Kullanımdan kaldırıldı. Bunun yerine toolchain_identifier özelliğini kullanın. Bir çocuğum olacak sonrasında Starlark'a CROSSTOOL geçişi ve şu tarihe kadar kaldırılacaktır: #7075.

Ayarlandığında, crosstool_config.toolchain seçimini gerçekleştirmek için kullanılır. Tamamlanması gereken --cpu Bazel seçeneğine göre önceliklidir.

compiler_files

Label; required

Derleme işlemleri için gereken tüm cc_toolchain yapılarının koleksiyonu.
compiler_files_without_includes

Label; optional

Şu durumlarda derleme işlemleri için gereken tüm cc_toolchain yapılarının toplanması: giriş keşfi desteklenir (şu anda yalnızca Google için).
coverage_files

Label; optional

Kapsam işlemleri için gereken tüm cc_toolchain yapılarının koleksiyonu. Belirtilmemişse all_files kullanılır.
cpu

String; optional; nonconfigurable

Kullanımdan kaldırıldı. Bunun yerine toolchain_identifier özelliğini kullanın. Bu sorudan sonra Starlark'a CROSSTOOL geçişi ve şu tarihe kadar kaldırılacaktır: #7075.

Ayarlandığında, crosstool_config.toolchain seçimini gerçekleştirmek için kullanılır. Tamamlanması gereken --cpu Bazel seçeneğine göre önceliklidir.

dwp_files

Label; required

Dwp işlemleri için gereken tüm cc_toolchain yapılarının koleksiyonu.
dynamic_runtime_lib

Label; optional

C++ çalışma zamanı kitaplığı için dinamik kitaplık yapısı (ör. libstdc++.so).

Bu parametre, "static_link_cpp_runtimes" etkinleştirildiğini görebilirsiniz. Şimdi de ve bunları dinamik bir şekilde gösterir.

exec_transition_for_inputs

Boolean; optional; default is True

Yürütme platformu için tüm dosya girişlerini cc_toolchain'de oluşturmak için True olarak ayarlayın. (varsayılan olarak hedef platform) ekleyebilirsiniz.
libc_top

Label; optional

Derleme/bağlama işlemleri için giriş olarak iletilen libc yapıları koleksiyonu.
linker_files

Label; required

Bağlantı işlemleri için gereken tüm cc_toolchain yapılarının koleksiyonu.
module_map

Label; optional

Modüler yapılarda kullanılacak modül haritası yapısı.
objcopy_files

Label; required

Objcopy işlemleri için gereken tüm cc_toolchain yapılarının koleksiyonu.
static_runtime_lib

Label; optional

C++ çalışma zamanı kitaplığı için statik kitaplık yapısı (ör. libstdc++.a).

Bu parametre, "static_link_cpp_runtimes" etkinleştirildiğini görebilirsiniz. Şimdi de ve her şeyi statik olarak içerir.

strip_files

Label; required

Banner işlemleri için gereken tüm cc_toolchain yapılarının koleksiyonu.
supports_header_parsing

Boolean; optional; default is False

cc_toolchain, başlık ayrıştırma işlemlerini destekliyorsa Doğru değerine ayarlayın.
supports_param_files

Boolean; optional; default is True

cc_toolchain, bağlantı işlemleri için param dosyalarının kullanılmasını desteklediğinde bu değeri True olarak ayarlayın.
toolchain_config

Label; required

cc_toolchain_config_info özelliğini sağlayan kuralın etiketi.
toolchain_identifier

String; optional; nonconfigurable

Bu cc_toolchain öğesini ilgili ile eşleştirmek için kullanılan tanımlayıcı crosstool_config.toolchain.

#5380 numaralı sorun düzeltilene kadar cc_toolchain öğesini, şununla ilişkilendirmek için önerilen yol budur: CROSSTOOL.toolchain. toolchain_config ile değiştirilecek (#5380) özelliğini gönderin.

cc_toolchain_suite

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

C++ araç zinciri koleksiyonlarını temsil eder.

Bu kural şunlardan sorumludur:

  • Alakalı tüm C++ araç zincirleri toplanıyor.
  • --cpu ve --compiler seçeneklerine bağlı olarak bir araç zinciri seçme Bazel'a aktarılmıştır.

Şuna da bakın: sayfa inceleyin.

Bağımsız değişkenler

Özellikler
name

Name; required

Bu hedef için benzersiz bir ad.

toolchains

Dictionary mapping strings to labels; required; nonconfigurable

"<cpu>" sorgusundan bir harita veya "<cpu>|<derleyici>" dize cc_toolchain etiketi. "<cpu>" yalnızca --cpu olduğunda kullanılır Bazel'a aktarılır ve "<cpu>|<derleyici>" birlikte kullanıldığında --cpu ve --compiler Bazel'e iletilir. Örnek:

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