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)

Örtülü çıkış hedefleri

  • name.stripped (yalnızca açıkça istenirse oluşturulur): İkili programın sadeleştirilmiş bir sürümü. Hata ayıklama sembollerini kaldırmak için ikili programda strip -g çalıştırılır. --stripopt=-foo kullanılarak komut satırında ek şerit seçenekleri sağlanabilir. Bu çıkış, yalnızca açıkça istenirse oluşturulur.
  • name.dwp (yalnızca açıkça istenirse oluşturulur): Fission etkinse: Uzaktan dağıtılan ikili programlarda hata ayıklamaya uygun bir hata ayıklama bilgi paketi dosyası. Diğer: Boş bir dosya.

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.

Bunlar cc_library veya objc_library hedef olabilir.

srcs

List of labels; optional

Hedefi oluşturmak için işlenen C ve C++ dosyalarının listesi. Bunlar, oluşturulmamış (normal kaynak kodu) veya oluşturulmuş C/C++ kaynak ve başlık dosyalarıdır.

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

Bir .h dosyası derlenmez ancak bu kurala dahil olan kaynaklar tarafından kullanılabilir. Hem .cc hem de .h dosyaları, bu srcs içinde veya deps bağımsız değişkeninde listelenen herhangi bir kuralın hdrs bölümünde listelenen üst bilgileri doğrudan içerebilir.

Tüm #included dosyaları, bu kuralın srcs özelliğinde veya referans verilen cc_library() öğelerinin hdrs özelliğinde belirtilmelidir. Önerilen stil, bir kitaplıkla ilişkilendirilmiş başlıkların söz konusu kitaplığın hdrs özelliğinde listelenmesi ve bu kuralın kaynaklarıyla ilişkili kalan üst bilgilerin srcs özelliğinde listelenmesi için kullanılır. Daha ayrıntılı bir açıklama için "Başlık dahil etme kontrolü" bölümüne bakın.

Bir kuralın adı srcs içindeyse kural otomatik olarak buna bağlı olur. Adlandırılan kuralın outs değeri C veya C++ kaynak dosyalarıysa bunlar bu kuralda derlenir; kitaplık dosyalarıysa bağlanırlar.

İzin verilen srcs dosya türü:

  • C ve C++ kaynak dosyaları: .c, .cc, .cpp, .cxx, .c++, .C
  • C ve C++ üst bilgi dosyaları: .h, .hh, .hpp, .hxx, .inc, .inl, .H
  • C ön işlemcili derleyici: .S
  • Arşiv: .a, .pic.a
  • "Her zaman bağlantı oluştur" kitaplığı: .lo, .pic.lo
  • Paylaşılan kitaplık (sürümü veya sürümü geri alınmış): .so, .so.version
  • Nesne dosyası: .o, .pic.o

...ve bu dosyaları oluşturan kurallar. Farklı uzantılar, gcc kuralına uygun olarak farklı programlama dillerini belirtir.

additional_linker_inputs

List of labels; optional

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

Örneğin, ikili program hedefine yerleştirilmek üzere derlenmiş Windows .res dosyaları burada sağlanabilir.

copts

List of strings; optional

Bu seçenekleri C++ derleme komutuna ekleyin. "Değişken oluşturma" değişikliğine ve Bourne kabuğu belirtkelemeye tabidir.

Bu özellikteki her dize, ikili hedef derlemeden önce COPTS öğesine belirtilen sırayla eklenir. İşaretler bağımlılıklarını değil, yalnızca bu hedefi derlerken geçerli olur. Bu nedenle, başka yerlerde eklenen başlık dosyalarına dikkat edin. Tüm yollar geçerli paketle değil, çalışma alanıyla ilgili olmalıdır.

Paket no_copts_tokenization özelliğini bildiriyorsa Bourne kabuğu jetona dönüştürme, yalnızca tek bir "Make" değişkeninden oluşan dizelere uygulanır.

defines

List of strings; optional

Derleme satırına eklenecek tanımlar listesi. "Make" değişkeninin değiştirilmesine ve Bourne kabuğu belirtkelemeye tabidir. Tek bir Bourne kabuk jetonundan oluşması gereken her dize, başına -D eklenir ve bu hedefin derleme komut satırına ve buna bağlı her kurala eklenir. Bu durum geniş kapsamlı etkilere sahip olabileceğinden çok dikkatli olun. Şüpheye düştüğünüzde bunun yerine değerleri local_defines etiketine ekleyin.
includes

List of strings; optional

Derleme satırına eklenecek dahil direnlerin listesi.

"Değişken oluşturma" değişikliğine tabidir. Her dizenin başına -isystem eklenir ve COPTS ile eklenir. COPTS'dan farklı olarak bu işaretler, bu kural ve buna bağlı her kural için eklenir. (Not: Bağlı olduğu kurallar değildir.) Bu durum geniş kapsamlı etkilere sahip olabileceğinden çok dikkatli olun. Şüpheye düştüğünüzde bunun yerine COPTS'a "-I" işaretlerini ekleyin.

Başlıklar, src'lere veya hdr'lere eklenmelidir. Aksi takdirde, derleme korumalı alana alındığında (varsayılan) bağımlı kurallar tarafından kullanılamazlar.

linkopts

List of strings; optional

Bu işaretleri C++ bağlayıcı komutuna ekleyin. "Make" değişkeninin değiştirilmesine, Bourne kabuğu belirtkeleme ve etiket genişletmeye tabidir. Bu özellikteki her dize, ikili hedef bağlanmadan önce LINKOPTS öğesine eklenir.

Bu listenin $ veya - ile başlamayan her bir öğesinin, deps içindeki bir hedef etiketi olduğu varsayılır. Bu hedef tarafından oluşturulan dosyaların listesi, bağlayıcı seçeneklerine eklenir. Etiket geçersizse veya deps içinde belirtilmezse hata bildirilir.

linkshared

Boolean; optional; nonconfigurable; default is False

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

Bu işaretin varlığı, bağlantı oluşturma işleminin -shared işaretiyle gcc yapıldığı ve ortaya çıkan paylaşılan kitaplığın örneğin bir Java programına yüklenmeye uygun olduğu anlamına gelir. Bununla birlikte, cc_binary kuralıyla oluşturulan paylaşılan kitaplıkların yalnızca diğer programlar tarafından manuel olarak yüklendiği ve bu nedenle cc_library kuralının alternatifi olarak düşünülmemesi nedeniyle derleme amacıyla hiçbir zaman bağımlı ikili programa bağlanmaz. Ölçeklenebilirlik için bu yaklaşımdan tamamen kaçınmanızı ve java_library politikasının cc_library kurallarına bağlı olmasına izin vermenizi öneririz.

Hem linkopts=['-static'] hem de linkshared=True belirtirseniz tamamen bağımsız tek bir birim elde edersiniz. Hem linkstatic=True hem de linkshared=True belirtirseniz bağımsız olan tek bir birim elde edersiniz.

linkstatic

Boolean; optional; default is True

cc_binary ve cc_test için: İkili dosyayı statik modda bağlayın. cc_library.linkstatic için: aşağıya bakın.

Bu seçenek, cc_binary için varsayılan olarak açık, kalan ayarlar için ise devre dışıdır.

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 içinde bağlantı oluşturmasını söyler. Bazı sistem kitaplıkları ve statik kitaplık olmayan kitaplıklar hâlâ dinamik olarak bağlı olabilir. Böylece sonuçta elde edilen yürütülebilir dosya dinamik olarak bağlantılı olmaya devam eder, bu nedenle yalnızca çoğunlukla statik olur.

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

  • Her şeyin statik olarak bağlandığı tam_statik_bağlantı özelliğine sahip STATIC (ör. "gcc -static foo.o libbar.a libbaz.a -lm").
    Bu mod, features özelliğinde fully_static_link belirtilerek etkinleştirilir.
  • STATİK: Tüm kullanıcı kitaplıklarının statik olarak bağlandığı (statik sürüm varsa) ancak sistem kitaplıklarının (C/C++ çalışma zamanı kitaplıkları hariç) dinamik olarak bağlandığı (ö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ığı DİNAMİK (dinamik sürüm varsa), ör. "gcc foo.o libfoo.so libbaz.so -lm".
    Bu mod, linkstatic=False belirtilerek etkinleştirilir.

linkstatic özelliği, cc_library() kuralında kullanılırsa farklı bir anlama gelir. Bir C++ kitaplığı için linkstatic=True, yalnızca statik bağlantıya izin verildiğini, dolayısıyla hiçbir .so oluşturulmayacağını belirtir. linkstatic=False, statik kitaplıkların oluşturulmasını engellemez. Özelliğin amacı, dinamik kitaplıkların oluşturulmasını kontrol etmektir.

linkstatic=False ise derleme aracı, *.runfiles alanında bağımlı olan paylaşılan kitaplıklara sembolik bağlantılar oluşturur.

local_defines

List of strings; optional

Derleme satırına eklenecek tanımlar listesi. "Make" değişkeninin değiştirilmesine ve Bourne kabuğu belirtkelemeye tabidir. Tek bir Bourne kabuk jetonundan oluşması gereken her dizenin başına -D eklenir ve bu hedefin derleme komut satırına eklenir ancak bağımlı öğelerine eklemeyin.
malloc

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

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

Varsayılan olarak C++ ikili programları, boş bir kitaplık olan //tools/cpp:malloc'e bağlanır. Bu nedenle ikili program, libc Malloc'u kullanır. Bu etiket bir cc_library'a işaret etmelidir. Derleme, C++ olmayan bir kural içinse bu seçeneğin hiçbir etkisi yoktur. linkshared=True belirtilmişse bu özelliğin değeri yoksayılır.

nocopts

String; optional

C++ derleme komutundan eşleşme seçeneklerini kaldırın. "Oluşturma" değişkeni değişikliğine tabidir. Bu özelliğin değeri normal bir ifade olarak yorumlanır. Bu normal ifadeyle eşleşen önceden mevcut olan tüm COPTS (kuralın copts özelliğinde açıkça belirtilen değerler dahil), bu kuralın derlenmesi amacıyla COPTS öğesinden kaldırılır. Bu özelliğe nadiren ihtiyaç duyulur.
stamp

Integer; optional; default is -1

Derleme bilgilerinin ikili programda kodlanıp kodlanmayacağı. Olası değerler:
  • stamp = 1: Derleme bilgilerini --nostamp derlemelerinde bile her zaman ikili programa damgalayın. Bu ayar, ikili program için uzaktan önbelleğe almayı ve buna bağlı olan aşağı akış işlemlerini sonlandırabileceğinden bu ayardan kaçınılmalıdır.
  • stamp = 0: Derleme bilgilerini her zaman sabit değerlerle değiştirin. Bu, iyi derleme sonucunu önbelleğe alma olanağı sağlar.
  • stamp = -1: Derleme bilgilerinin yerleştirilmesi --[no]stamp işaretiyle kontrol edilir.

Damgalı ikili programlar, bağımlılıkları değişmediği sürece 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. Paylaşılan bir kitaplığı bağlarken sembolleri dışa aktarmak için kullanılabilir.

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 kitaplığı bağlama (Unix)
cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  shared_library = "libmylib.so",
)
3. Paylaşılan 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",
)
4. Paylaşılan kitaplığı system_provided=True ile bağlama (Windows)
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. Statik veya paylaşılan kitaplığa bağlama
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

Bu önceden derlenmiş kitaplık tarafından yayınlanan ve bağımlı kurallardaki kaynaklar tarafından doğrudan dahil edilecek başlık dosyalarının listesi.

Boolean; optional; default is False

1 ise (doğrudan veya dolaylı olarak) bu C++ önceden derlenmiş kitaplığa bağlı olan herhangi bir ikili program, bazı ikili program tarafından başvurulan hiçbir simge içermese bile statik kitaplıkta arşivlenen tüm nesne dosyalarına bağlantı verir. Bu yöntem, kodunuz ikili programdaki kod tarafından açıkça çağrılmıyorsa (ör. kodunuz bir hizmet tarafından sağlanan geri çağırmayı almak için kaydolursa) faydalıdır.

Bilinen bir sorun nedeniyle Windows'da her zaman VS 2017 VS 2017 ile çalışmıyorsa lütfen VS 2017'nizi 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, çalışma sırasında buna bağlı olan ikili programın kullanılabilmesini sağlar.

İ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 gereken paylaşılan kitaplığın sistem tarafından sağlandığını gösterir. Bu durumda, interface_library belirtilmeli ve shared_library boş bırakılmalı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)

Başlık dahil etme kontrolü

Derlemede kullanılan tüm üstbilgi dosyaları, cc_* kurallarının hdrs veya srcs bölümünde bildirilmelidir. Bu zorunlu kılınmıştır.

cc_library kuralları için hdrs içindeki başlıklar, kitaplığın herkese açık arayüzünü oluşturur ve hem kitaplığın hdrs ve srcs içindeki dosyalardan hem de kitaplığı deps içinde listeleyen hdrs ve cc_* kuralındaki dosyalardan doğrudan eklenebilir.srcs srcs içindeki başlıklar doğrudan kitaplığın hdrs ve srcs içindeki dosyalardan eklenmelidir. hdrs veya srcs içine başlık ekleyip eklemeyeceğinize karar verirken, bu kitaplıktaki tüketicilerin bunu doğrudan dahil etmesini isteyip istemediğinizi sormalısınız. Bu, programlama dillerindeki public ve private görünürlüğüyle yaklaşık olarak aynı karardır.

cc_binary ve cc_test kurallarının dışa aktarılan bir arayüzü olmadığından hdrs özelliği de yoktur. Doğrudan ikili programa veya teste ait olan tüm başlıklar srcs içinde listelenmelidir.

Bu kuralları açıklamak için aşağıdaki örneği inceleyin.

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 doğrudan foo.h ve bar.h içermesine izin verilir ancak baz.h öğesinin eklenmesine izin verilmez.

Dosya ekleniyorİzin verilen dahil etmeler
foo.hbar.h
foo.ccfoo.h bar.h
bar.hbar-impl.h baz.h
bar-impl.hbar.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 etme kontrolü kuralları yalnızca doğrudan dahil etmeler için geçerlidir. Yukarıdaki örnekte foo.cc öğesinin bar.h içermesine izin verilir. Bu durumda baz.h, baz-impl.h içerebilir. Teknik olarak, bir .cc dosyasının derlemesi, geçişli deps kapanışında herhangi bir cc_library içinde yer alan hdrs veya srcs içindeki herhangi bir üstbilgi dosyasını geçişli olarak içerebilir. Bu durumda derleyici, foo.cc derlerken baz.h ve baz-impl.h değerlerini okuyabilir ancak foo.cc, #include "baz.h" içermemelidir. Buna izin verilmesi için baz öğesinin, foo öğesinin deps öğesine eklenmesi gerekir.

Maalesef Bazel şu anda doğrudan ve geçişli eklemeleri birbirinden ayırt edememektedir. Bu nedenle, bir dosyanın yasa dışı bir şekilde, yalnızca geçişli olarak eklenmesine izin verilen bir başlığın doğrudan içerdiği hata durumlarını algılayamaz. Örneğin, yukarıdaki örnekte foo.cc doğrudan baz.h içeriyorsa Bazel şikayet etmez. foo, baz doğrudan bağımlı olmadığından bu geçersiz olur. Bu durumda şu anda herhangi bir hata oluşturulmamaktadır, ancak gelecekte bu tür hata kontrolleri 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.

Bunlar cc_library veya objc_library hedef olabilir.

srcs

List of labels; optional

Hedefi oluşturmak için işlenen C ve C++ dosyalarının listesi. Bunlar, oluşturulmamış (normal kaynak kodu) veya oluşturulmuş C/C++ kaynak ve başlık dosyalarıdır.

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

Bir .h dosyası derlenmez ancak bu kurala dahil olan kaynaklar tarafından kullanılabilir. Hem .cc hem de .h dosyaları, bu srcs içinde veya deps bağımsız değişkeninde listelenen herhangi bir kuralın hdrs bölümünde listelenen üst bilgileri doğrudan içerebilir.

Tüm #included dosyaları, bu kuralın srcs özelliğinde veya referans verilen cc_library() öğelerinin hdrs özelliğinde belirtilmelidir. Önerilen stil, bir kitaplıkla ilişkilendirilmiş başlıkların söz konusu kitaplığın hdrs özelliğinde listelenmesi ve bu kuralın kaynaklarıyla ilişkili kalan üst bilgilerin srcs özelliğinde listelenmesi için kullanılır. Daha ayrıntılı bir açıklama için "Başlık dahil etme kontrolü" bölümüne bakın.

Bir kuralın adı srcs içindeyse kural otomatik olarak buna bağlı olur. Adlandırılan kuralın outs değeri C veya C++ kaynak dosyalarıysa bunlar bu kuralda derlenir; kitaplık dosyalarıysa bağlanırlar.

İzin verilen srcs dosya türü:

  • C ve C++ kaynak dosyaları: .c, .cc, .cpp, .cxx, .c++, .C
  • C ve C++ üst bilgi dosyaları: .h, .hh, .hpp, .hxx, .inc, .inl, .H
  • C ön işlemcili derleyici: .S
  • Arşiv: .a, .pic.a
  • "Her zaman bağlantı oluştur" kitaplığı: .lo, .pic.lo
  • Paylaşılan kitaplık (sürümü veya sürümü geri alınmış): .so, .so.version
  • Nesne dosyası: .o, .pic.o

...ve bu dosyaları oluşturan kurallar. Farklı uzantılar, gcc kuralına uygun olarak farklı programlama dillerini belirtir.

hdrs

List of labels; optional

Bu kitaplık tarafından yayınlanan ve bağımlı kurallardaki kaynaklar tarafından doğrudan dahil edilecek başlık dosyalarının listesi.

Bu, kitaplığın arayüzünü açıklayan başlık dosyalarının bildirilmesi için kesinlikle tercih edilen konumdur. Bu üst bilgiler, bu kuraldaki veya bağımlı kurallardaki kaynaklar tarafından eklenmek üzere kullanıma sunulacak. Bu kitaplığın istemcisi tarafından eklenmemesi amaçlanan başlıklar, yayınlanan bir başlık tarafından dahil edilmiş olsa bile srcs özelliğinde listelenmelidir. Daha ayrıntılı açıklama için "Başlık dahil etme kontrolü" bölümüne bakın.

Boolean; optional; default is False

1 ise bu C++ kitaplığına bağlı olan herhangi bir ikili program (doğrudan veya dolaylı olarak), srcs içinde listelenen dosyaların tüm nesne dosyalarına bağlantı oluşturur. Bazıları ikili programın başvurduğu herhangi bir simge içermese bile. Bu yöntem, kodunuz ikili programdaki kod tarafından açıkça çağrılmıyorsa (ör. kodunuz bir hizmet tarafından sağlanan geri çağırmayı almak için kaydolursa) faydalıdır.

Bilinen bir sorun nedeniyle Windows'da her zaman VS 2017 VS 2017 ile çalışmıyorsa lütfen VS 2017'nizi en son sürüme yükseltin.

copts

List of strings; optional

Bu seçenekleri C++ derleme komutuna ekleyin. "Değişken oluşturma" değişikliğine ve Bourne kabuğu belirtkelemeye tabidir.

Bu özellikteki her dize, ikili hedef derlemeden önce COPTS öğesine belirtilen sırayla eklenir. İşaretler bağımlılıklarını değil, yalnızca bu hedefi derlerken geçerli olur. Bu nedenle, başka yerlerde eklenen başlık dosyalarına dikkat edin. Tüm yollar geçerli paketle değil, çalışma alanıyla ilgili olmalıdır.

Paket no_copts_tokenization özelliğini bildiriyorsa Bourne kabuğu jetona dönüştürme, yalnızca tek bir "Make" değişkeninden oluşan dizelere uygulanır.

defines

List of strings; optional

Derleme satırına eklenecek tanımlar listesi. "Make" değişkeninin değiştirilmesine ve Bourne kabuğu belirtkelemeye tabidir. Tek bir Bourne kabuk jetonundan oluşması gereken her dize, başına -D eklenir ve bu hedefin derleme komut satırına ve buna bağlı her kurala eklenir. Bu durum geniş kapsamlı etkilere sahip olabileceğinden çok dikkatli olun. Şüpheye düştüğünüzde bunun yerine değerleri local_defines etiketine ekleyin.
implementation_deps

List of labels; optional

Kitaplık hedefinin bağlı olduğu diğer kitaplıkların listesi. deps ile farklı olarak, bu kitaplıkların (ve tüm geçişli bağlantılarının) başlıkları ve dahil yolları yalnızca bu kitaplığın derlenmesi için kullanılır, kendisine bağlı kitaplıklar için kullanılmaz. implementation_deps ile belirtilen kitaplıklar, bu kitaplığa bağlı olan ikili program hedeflerine bağlı kalmaya devam eder.

Şimdilik kullanım cc_libraries ile sınırlıdır ve --experimental_cc_implementation_deps işaretiyle korunur.

include_prefix

String; optional

Bu kuralın üstbilgilerinin yollarına eklenecek ön ek.

Ayarlandığında, bu kuralın hdrs özelliğindeki üst bilgilere, bu özelliğin kod deposuyla göreli yolunun önüne eklenen değeri erişilebilir.

strip_include_prefix özelliğindeki ön ek, bu önek eklenmeden önce kaldırılır.

includes

List of strings; optional

Derleme satırına eklenecek dahil direnlerin listesi.

"Değişken oluşturma" değişikliğine tabidir. Her dizenin başına -isystem eklenir ve COPTS ile eklenir. COPTS'dan farklı olarak bu işaretler, bu kural ve buna bağlı her kural için eklenir. (Not: Bağlı olduğu kurallar değildir.) Bu durum geniş kapsamlı etkilere sahip olabileceğinden çok dikkatli olun. Şüpheye düştüğünüzde bunun yerine COPTS'a "-I" işaretlerini ekleyin.

Başlıklar, src'lere veya hdr'lere eklenmelidir. Aksi takdirde, derleme korumalı alana alındığında (varsayılan) bağımlı kurallar tarafından kullanılamazlar.

linkopts

List of strings; optional

Bu işaretleri C++ bağlayıcı komutuna ekleyin. "Make" değişkeninin değiştirilmesine, Bourne kabuğu belirtkeleme ve etiket genişletmeye tabidir. Bu özellikteki her dize, ikili hedef bağlanmadan önce LINKOPTS öğesine eklenir.

Bu listenin $ veya - ile başlamayan her bir öğesinin, deps içindeki bir hedef etiketi olduğu varsayılır. Bu hedef tarafından oluşturulan dosyaların listesi, bağlayıcı seçeneklerine eklenir. Etiket geçersizse veya deps içinde belirtilmezse hata bildirilir.

linkstamp

Label; optional

Eş zamanlı olarak derler ve belirtilen C++ kaynak dosyasını son ikili dosyaya bağlar. Bu numara, zaman damgası bilgilerini ikili programlara sokmak için gereklidir. Kaynak dosyayı her zamanki gibi bir nesne dosyasına derlersek zaman damgası yanlış olur. Bir linkstamp derlemesi, belirli bir derleyici işareti grubunu içeremez ve bu nedenle belirli bir başlığa, derleyici seçeneğine veya başka bir derleme değişkenine bağlı olmamalıdır. Bu seçenek yalnızca base paketinde gereklidir.
linkstatic

Boolean; optional; default is False

cc_binary ve cc_test için: İkili dosyayı statik modda bağlayın. cc_library.linkstatic için: aşağıya bakın.

Bu seçenek, cc_binary için varsayılan olarak açık, kalan ayarlar için ise devre dışıdır.

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 içinde bağlantı oluşturmasını söyler. Bazı sistem kitaplıkları ve statik kitaplık olmayan kitaplıklar hâlâ dinamik olarak bağlı olabilir. Böylece sonuçta elde edilen yürütülebilir dosya dinamik olarak bağlantılı olmaya devam eder, bu nedenle yalnızca çoğunlukla statik olur.

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

  • Her şeyin statik olarak bağlandığı tam_statik_bağlantı özelliğine sahip STATIC (ör. "gcc -static foo.o libbar.a libbaz.a -lm").
    Bu mod, features özelliğinde fully_static_link belirtilerek etkinleştirilir.
  • STATİK: Tüm kullanıcı kitaplıklarının statik olarak bağlandığı (statik sürüm varsa) ancak sistem kitaplıklarının (C/C++ çalışma zamanı kitaplıkları hariç) dinamik olarak bağlandığı (ö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ığı DİNAMİK (dinamik sürüm varsa), ör. "gcc foo.o libfoo.so libbaz.so -lm".
    Bu mod, linkstatic=False belirtilerek etkinleştirilir.

linkstatic özelliği, cc_library() kuralında kullanılırsa farklı bir anlama gelir. Bir C++ kitaplığı için linkstatic=True, yalnızca statik bağlantıya izin verildiğini, dolayısıyla hiçbir .so oluşturulmayacağını belirtir. linkstatic=False, statik kitaplıkların oluşturulmasını engellemez. Özelliğin amacı, dinamik kitaplıkların oluşturulmasını kontrol etmektir.

linkstatic=False ise derleme aracı, *.runfiles alanında bağımlı olan paylaşılan kitaplıklara sembolik bağlantılar oluşturur.

local_defines

List of strings; optional

Derleme satırına eklenecek tanımlar listesi. "Make" değişkeninin değiştirilmesine ve Bourne kabuğu belirtkelemeye tabidir. Tek bir Bourne kabuk jetonundan oluşması gereken her dizenin başına -D eklenir ve bu hedefin derleme komut satırına eklenir ancak bağımlı öğelerine eklemeyin.
nocopts

String; optional

C++ derleme komutundan eşleşme seçeneklerini kaldırın. "Oluşturma" değişkeni değişikliğine tabidir. Bu özelliğin değeri normal bir ifade olarak yorumlanır. Bu normal ifadeyle eşleşen önceden mevcut olan tüm COPTS (kuralın copts özelliğinde açıkça belirtilen değerler dahil), bu kuralın derlenmesi amacıyla COPTS öğesinden kaldırılır. Bu özelliğe nadiren ihtiyaç duyulur.
strip_include_prefix

String; optional

Bu kuralın başlıklarının yollarından çıkarılacak ön ek.

Ayarlandığında bu kuralın hdrs özelliğindeki başlıklar, bu ön ek kesilerek kendi yolunda erişilebilir.

Göreli bir yol ise pakete bağlı yol olarak kabul edilir. Mutlak bir ise depoya bağlı yol olarak kabul edilir.

include_prefix özelliğindeki ön ek, bu önek çıkarıldıktan sonra eklenir.

textual_hdrs

List of labels; optional

Bu kitaplık tarafından yayınlanan ve bağımlı kurallardaki kaynaklar tarafından metin olarak dahil edilecek başlık dosyalarının listesi.

Bu, kendi başlarına derlenemeyecek olan başlık dosyalarının bildirilmesi için kullanılan konumdur. Yani, geçerli kod oluşturmak için bu dosyaların her zaman diğer kaynak dosyaları tarafından metin olarak eklenmesi gerekir.

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. Paylaşılan bir kitaplığı bağlarken sembolleri dışa aktarmak için kullanılabilir.

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 kuralları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

C++ kodu oluşturulacak proto_library kurallarının listesi.

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 mutlak yolda bulunan FDO önceden getirme ipuçları profilini temsil eder. Ö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. İpuçları dosyası .afdo uzantısına sahiptir. Etiket, bir fdo_absolute_path_profile kuralını 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 bir mutlak yolda bulunan 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 profiline giden mutlak yol. FDO dosyasında aşağıdaki uzantılardan biri olabilir: dizine eklenmemiş LLVM profili için .profraw, dizine eklenen LLVM profili için .profdata, LLVM profraw profili içeren .zip veya AutoFDO profili için .afdo.
profile

Label; optional

FDO profilinin veya profili oluşturan kuralın etiketi. FDO dosyasında şu uzantılardan biri olabilir: Dizine eklenmeyen LLVM profili için .profraw, dizine eklenen LLVM profili için .profdata; LLVM profraw profili içeren .zip; AutoFDO profili için .afdo, XBinary profili için .xfdo. Etiket, bir fdo_absolute_path_profile kuralını 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ındaki 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 dosyanın uzantısı .txt'dir.

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.

Bunlar cc_library veya objc_library hedef olabilir.

srcs

List of labels; optional

Hedefi oluşturmak için işlenen C ve C++ dosyalarının listesi. Bunlar, oluşturulmamış (normal kaynak kodu) veya oluşturulmuş C/C++ kaynak ve başlık dosyalarıdır.

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

Bir .h dosyası derlenmez ancak bu kurala dahil olan kaynaklar tarafından kullanılabilir. Hem .cc hem de .h dosyaları, bu srcs içinde veya deps bağımsız değişkeninde listelenen herhangi bir kuralın hdrs bölümünde listelenen üst bilgileri doğrudan içerebilir.

Tüm #included dosyaları, bu kuralın srcs özelliğinde veya referans verilen cc_library() öğelerinin hdrs özelliğinde belirtilmelidir. Önerilen stil, bir kitaplıkla ilişkilendirilmiş başlıkların söz konusu kitaplığın hdrs özelliğinde listelenmesi ve bu kuralın kaynaklarıyla ilişkili kalan üst bilgilerin srcs özelliğinde listelenmesi için kullanılır. Daha ayrıntılı bir açıklama için "Başlık dahil etme kontrolü" bölümüne bakın.

Bir kuralın adı srcs içindeyse kural otomatik olarak buna bağlı olur. Adlandırılan kuralın outs değeri C veya C++ kaynak dosyalarıysa bunlar bu kuralda derlenir; kitaplık dosyalarıysa bağlanırlar.

İzin verilen srcs dosya türü:

  • C ve C++ kaynak dosyaları: .c, .cc, .cpp, .cxx, .c++, .C
  • C ve C++ üst bilgi dosyaları: .h, .hh, .hpp, .hxx, .inc, .inl, .H
  • C ön işlemcili derleyici: .S
  • Arşiv: .a, .pic.a
  • "Her zaman bağlantı oluştur" kitaplığı: .lo, .pic.lo
  • Paylaşılan kitaplık (sürümü veya sürümü geri alınmış): .so, .so.version
  • Nesne dosyası: .o, .pic.o

...ve bu dosyaları oluşturan kurallar. Farklı uzantılar, gcc kuralına uygun olarak farklı programlama dillerini belirtir.

additional_linker_inputs

List of labels; optional

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

Örneğin, ikili program hedefine yerleştirilmek üzere derlenmiş Windows .res dosyaları burada sağlanabilir.

copts

List of strings; optional

Bu seçenekleri C++ derleme komutuna ekleyin. "Değişken oluşturma" değişikliğine ve Bourne kabuğu belirtkelemeye tabidir.

Bu özellikteki her dize, ikili hedef derlemeden önce COPTS öğesine belirtilen sırayla eklenir. İşaretler bağımlılıklarını değil, yalnızca bu hedefi derlerken geçerli olur. Bu nedenle, başka yerlerde eklenen başlık dosyalarına dikkat edin. Tüm yollar geçerli paketle değil, çalışma alanıyla ilgili olmalıdır.

Paket no_copts_tokenization özelliğini bildiriyorsa Bourne kabuğu jetona dönüştürme, yalnızca tek bir "Make" değişkeninden oluşan dizelere uygulanır.

defines

List of strings; optional

Derleme satırına eklenecek tanımlar listesi. "Make" değişkeninin değiştirilmesine ve Bourne kabuğu belirtkelemeye tabidir. Tek bir Bourne kabuk jetonundan oluşması gereken her dize, başına -D eklenir ve bu hedefin derleme komut satırına ve buna bağlı her kurala eklenir. Bu durum geniş kapsamlı etkilere sahip olabileceğinden çok dikkatli olun. Şüpheye düştüğünüzde bunun yerine değerleri local_defines etiketine ekleyin.
includes

List of strings; optional

Derleme satırına eklenecek dahil direnlerin listesi.

"Değişken oluşturma" değişikliğine tabidir. Her dizenin başına -isystem eklenir ve COPTS ile eklenir. COPTS'dan farklı olarak bu işaretler, bu kural ve buna bağlı her kural için eklenir. (Not: Bağlı olduğu kurallar değildir.) Bu durum geniş kapsamlı etkilere sahip olabileceğinden çok dikkatli olun. Şüpheye düştüğünüzde bunun yerine COPTS'a "-I" işaretlerini ekleyin.

Başlıklar, src'lere veya hdr'lere eklenmelidir. Aksi takdirde, derleme korumalı alana alındığında (varsayılan) bağımlı kurallar tarafından kullanılamazlar.

linkopts

List of strings; optional

Bu işaretleri C++ bağlayıcı komutuna ekleyin. "Make" değişkeninin değiştirilmesine, Bourne kabuğu belirtkeleme ve etiket genişletmeye tabidir. Bu özellikteki her dize, ikili hedef bağlanmadan önce LINKOPTS öğesine eklenir.

Bu listenin $ veya - ile başlamayan her bir öğesinin, deps içindeki bir hedef etiketi olduğu varsayılır. Bu hedef tarafından oluşturulan dosyaların listesi, bağlayıcı seçeneklerine eklenir. Etiket geçersizse veya deps içinde belirtilmezse hata bildirilir.

linkstatic

Boolean; optional; default is False

cc_binary ve cc_test için: İkili dosyayı statik modda bağlayın. cc_library.linkstatic için: aşağıya bakın.

Bu seçenek, cc_binary için varsayılan olarak açık, kalan ayarlar için ise devre dışıdır.

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 içinde bağlantı oluşturmasını söyler. Bazı sistem kitaplıkları ve statik kitaplık olmayan kitaplıklar hâlâ dinamik olarak bağlı olabilir. Böylece sonuçta elde edilen yürütülebilir dosya dinamik olarak bağlantılı olmaya devam eder, bu nedenle yalnızca çoğunlukla statik olur.

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

  • Her şeyin statik olarak bağlandığı tam_statik_bağlantı özelliğine sahip STATIC (ör. "gcc -static foo.o libbar.a libbaz.a -lm").
    Bu mod, features özelliğinde fully_static_link belirtilerek etkinleştirilir.
  • STATİK: Tüm kullanıcı kitaplıklarının statik olarak bağlandığı (statik sürüm varsa) ancak sistem kitaplıklarının (C/C++ çalışma zamanı kitaplıkları hariç) dinamik olarak bağlandığı (ö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ığı DİNAMİK (dinamik sürüm varsa), ör. "gcc foo.o libfoo.so libbaz.so -lm".
    Bu mod, linkstatic=False belirtilerek etkinleştirilir.

linkstatic özelliği, cc_library() kuralında kullanılırsa farklı bir anlama gelir. Bir C++ kitaplığı için linkstatic=True, yalnızca statik bağlantıya izin verildiğini, dolayısıyla hiçbir .so oluşturulmayacağını belirtir. linkstatic=False, statik kitaplıkların oluşturulmasını engellemez. Özelliğin amacı, dinamik kitaplıkların oluşturulmasını kontrol etmektir.

linkstatic=False ise derleme aracı, *.runfiles alanında bağımlı olan paylaşılan kitaplıklara sembolik bağlantılar oluşturur.

local_defines

List of strings; optional

Derleme satırına eklenecek tanımlar listesi. "Make" değişkeninin değiştirilmesine ve Bourne kabuğu belirtkelemeye tabidir. Tek bir Bourne kabuk jetonundan oluşması gereken her dizenin başına -D eklenir ve bu hedefin derleme komut satırına eklenir ancak bağımlı öğelerine eklemeyin.
malloc

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

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

Varsayılan olarak C++ ikili programları, boş bir kitaplık olan //tools/cpp:malloc'e bağlanır. Bu nedenle ikili program, libc Malloc'u kullanır. Bu etiket bir cc_library'a işaret etmelidir. Derleme, C++ olmayan bir kural içinse bu seçeneğin hiçbir etkisi yoktur. linkshared=True belirtilmişse bu özelliğin değeri yoksayılır.

nocopts

String; optional

C++ derleme komutundan eşleşme seçeneklerini kaldırın. "Oluşturma" değişkeni değişikliğine tabidir. Bu özelliğin değeri normal bir ifade olarak yorumlanır. Bu normal ifadeyle eşleşen önceden mevcut olan tüm COPTS (kuralın copts özelliğinde açıkça belirtilen değerler dahil), bu kuralın derlenmesi amacıyla COPTS öğesinden kaldırılır. Bu özelliğe nadiren ihtiyaç duyulur.
stamp

Integer; optional; default is 0

Derleme bilgilerinin ikili programda kodlanıp kodlanmayacağı. Olası değerler:
  • stamp = 1: Derleme bilgilerini --nostamp derlemelerinde bile her zaman ikili programa damgalayın. Bu ayar, ikili program için uzaktan önbelleğe almayı ve buna bağlı olan aşağı akış işlemlerini sonlandırabileceğinden bu ayardan kaçınılmalıdır.
  • stamp = 0: Derleme bilgilerini her zaman sabit değerlerle değiştirin. Bu, iyi derleme sonucunu önbelleğe alma olanağı sağlar.
  • stamp = -1: Derleme bilgilerinin yerleştirilmesi --[no]stamp işaretiyle kontrol edilir.

Damgalı ikili programlar, bağımlılıkları değişmediği sürece 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. Paylaşılan bir kitaplığı bağlarken sembolleri dışa aktarmak için kullanılabilir.

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 oluşur:

  • C++ işlemlerinin çalışması için gereken tüm yapılar toplanıyor. Bu işlem all_files, compiler_files, linker_files gibi özellikler veya _files ile biten diğer özellikler tarafından yapılır. Bunlar en yaygın olarak gerekli tüm dosyaları bölen dosya gruplarıdır.
  • C++ işlemleri için doğru komut satırları oluşturuluyor. Bu işlem, CcToolchainConfigInfo sağlayıcısı kullanılarak yapılır (ayrıntılar aşağıda verilmiştir).

C++ araç zincirini yapılandırmak için toolchain_config özelliğini kullanın. C++ araç zinciri yapılandırması ve araç zinciri seçimiyle ilgili ayrıntılı dokümanlar için bu sayfaya da göz atın.

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

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, rules_cc ile ilgili tüm işlemlere giriş olarak eklenir (aşağıdaki özelliklerde bulunan daha hassas yapı gruplarını kullanan işlemler hariç). Bazel, all_files öğesinin diğer tüm yapı sağlayan özelliklerin üst kümesi olduğunu varsayar (örneğin, bağlantı damgası derlemesi hem derleme hem de bağlantı dosyası gerektirdiği için all_files gerekir).

cc_toolchain.files, C++ araç zincirini kullanan tüm Starlark kuralları tarafından kullanılır.

ar_files

Label; optional

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

as_files

Label; optional

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

compiler

String; optional; nonconfigurable

Kullanımdan kaldırıldı. Bunun yerine toolchain_identifier özelliğini kullanın. CROSSTOOL'un Starlark'a taşınmasından sonra ermiş olacak ve #7075'ten sonra kaldırılacaktır.

Bu parametre ayarlandığında, crosstool_config.toolchain seçimi için kullanılır. --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

Giriş keşfinin desteklendiği durumlarda, derleme işlemleri için gereken tüm cc_toolchain yapılarının toplanması (şu anda yalnızca Google'da kullanılabilir).
coverage_files

Label; optional

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

String; optional; nonconfigurable

Kullanımdan kaldırıldı. Bunun yerine toolchain_identifier özelliğini kullanın. CROSSTOOL, Starlark'a geçişten sonra geçici bir saat olarak kabul edilecek ve #7075 ile kaldırılacaktır.

Bu parametre ayarlandığında, crosstool_config.toolchain seçimi için kullanılır. --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 toplanması
dynamic_runtime_lib

Label; optional

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

Bu, "static_link_cpp_runtimes" özelliği etkinleştirildiğinde ve bağımlılıkları dinamik olarak bağladığımızda kullanılır.

exec_transition_for_inputs

Boolean; optional; default is True

Tüm dosya girişlerini, geçiş olmadan (yani varsayılan olarak hedef platform) exec platformu için cc_toolchain'de derlemek için True değerine ayarlayın.
libc_top

Label; optional

libc için derleme/bağlantı oluşturma işlemleri için giriş olarak iletilen yapı 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ılar için kullanılacak modül harita yapısı.
objcopy_files

Label; required

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

Label; optional

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

Bu işlev, "static_link_cpp_runtimes" özelliği etkinleştirildiğinde kullanılır ve bağımlılıkları statik olarak bağlarız.

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 ayarlanır.
supports_param_files

Boolean; optional; default is True

cc_toolchain bağlantı işlemleri için parametre dosyalarının kullanılmasını desteklediğinde Doğru değerine ayarlanır.
toolchain_config

Label; required

cc_toolchain_config_info sağlayan kuralın etiketi.
toolchain_identifier

String; optional; nonconfigurable

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

#5380 numaralı sorun düzeltilene kadar cc_toolchain CROSSTOOL.toolchain ile ilişkilendirilmesi için önerilen yöntem budur. Bu değer, toolchain_config özelliğiyle (#5380) değiştirilir.

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 oluşur:

  • İlgili tüm C++ araç zincirlerini toplama.
  • --cpu ve --compiler seçeneklerine bağlı olarak Bazel'e iletilen bir araç zincirini belirleme.

C++ araç zinciri yapılandırması ve araç zinciri seçimiyle ilgili ayrıntılı dokümanlar için bu sayfaya da göz atın.

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>" veya "<cpu>|<derleyici>" dizelerinden cc_toolchain etiketine bir eşleme. Bazel'e yalnızca --cpu geçirildiğinde "<cpu>" kullanılır ve hem --cpu hem de --compiler Bazel'e geçirildiğinde "<cpu>|<derr>" kullanılır. Ö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",
            },
          )