Kurallar
- cc_binary
- cc_içe aktarma
- cc_library
- cc_proto_kitaplığı
- cc_shared_library
- fdo_preFetch_hints
- fdo_profile
- propeller_optimize et
- cc_test
- cc_toolchain
- cc_toolchain_ Suite
cc_binary
Kural kaynağını göstercc_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): İkili programın sadeleştirilmiş bir sürümü.strip -g
, hata ayıklama sembollerini kaldırmak için ikili programda çalıştırılır. Komut satırında--stripopt=-foo
kullanılarak ek şerit seçenekleri sağlanabilir. Bu çıkış yalnızca açıkça istendiğinde oluşturulur.name.dwp
(yalnızca açıkça isteniyorsa): 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 |
Bu hedef için benzersiz bir ad. |
deps
|
Bunlar |
srcs
|
Tüm Bir Tüm Bir kuralın adı
İzin verilen
...ve bu dosyaları üreten tüm kurallar. Farklı uzantılar, gcc kurallarına uygun şekilde farklı programlama dillerini belirtir. |
additional_linker_inputs
|
Örneğin, derlenmiş Windows .res dosyaları burada ikili hedefe yerleştirilmek üzere sağlanabilir. |
copts
|
Bu özellikteki her dize, ikili hedef derlenmeden önce belirtilen sırada
Paket |
defines
|
-D ifadesinin başına eklenir ve bu hedefe ve ona bağlı her kural için derleme komut satırına eklenir. Çok geniş kapsamlı etkileri olabileceği için çok dikkatli olun. Şüpheye düştüğünüzde tanım değerlerini local_defines öğesine ekleyin.
|
includes
|
"Değişken oluştur" değişikliğine tabidir.
Her dizenin başına Üstbilgiler, src'lere veya hdr'lere eklenmelidir. Aksi takdirde, derleme korumalı alana alındığında (varsayılan) bağlı kurallar tarafından kullanılamaz. |
linkopts
|
LINKOPTS öğesine eklenir.
Bu listenin |
linkshared
|
linkshared=True ekleyin. Bu seçenek varsayılan olarak kapalıdır.
Bu işaretin olması, bağlantı oluşturma işleminin
Hem |
linkstatic
|
cc_binary ve cc_test için ikili programı statik modda bağlayın. cc_library.linkstatic için: Aşağıya bakın.
Bu seçenek varsayılan olarak
Bu seçenek etkinleştirilirse ve bu bir ikili program veya test ise mümkün olduğunda kullanıcı kitaplıklarında derleme aracına Yürütülebilir dosyayı bağlamanın üç yolu vardır:
|
local_defines
|
-D ifadesinin başına eklenir ve bu hedefin derleme komut satırına eklenir ancak bağımlılarına eklenmez.
|
malloc
|
Varsayılan olarak C++ ikili programları |
nocopts
|
COPTS (kuralın copts özelliğinde açıkça belirtilen değerler dahil) bu kuralı derlemek amacıyla COPTS öğesinden kaldırılacak.
Bu özelliğe nadiren ihtiyaç duyulmalıdır.
|
stamp
|
Damgalı ikili programlar, bağımlılıkları değişmediği sürece yeniden oluşturulmaz. |
win_def_file
|
Bu özellik yalnızca hedef platform Windows olduğunda kullanılmalıdır. Paylaşılan bir kitaplığı bağlarken simgeleri dışa aktarmak için kullanılabilir. |
cc_içe aktarma
Kural kaynağını göstercc_import(name, deps, 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.
Genel kullanım alanları aşağıda belirtilmiştir:
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 bir kitaplığı arayüz kitaplığına 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 will be available for runtime shared_library = "mylib.dll", )4. Paylaşılan bir 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ıkla bağlantı oluşturma
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, )
cc_import
, dahil etme özelliğini destekler. Örneğin:
cc_import( name = "curl_lib", hdrs = glob(["vendor/curl/include/curl/*.h"]), includes = [ "vendor/curl/include" ], shared_library = "vendor/curl/lib/.libs/libcurl.dylib", )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Bu hedef için benzersiz bir ad. |
deps
|
deps hakkında genel yorumları görebilirsiniz.
|
hdrs
|
|
alwayslink
|
Windows'da VS 2017 her zaman çalışmıyorsa bunun nedeni bilinen bir sorundur lütfen VS 2017'nizi en son sürüme geçirin. |
interface_library
|
İzin verilen dosya türleri:
|
shared_library
|
İzin verilen dosya türleri:
|
static_library
|
İzin verilen dosya türleri:
|
system_provided
|
interface_library değeri belirtilmeli ve shared_library boş bırakılmalıdır.
|
cc_kitaplık
Kural kaynağını göstercc_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 ekleme kontrolü
Derlemede kullanılan tüm başlık dosyaları, cc_*
kuralların hdrs
veya srcs
kuralında tanımlanmalıdır. Bu zorunlu kılınır.
cc_library
kuralları için hdrs
içindeki başlıklar, kitaplığın herkese açık arayüzünü oluşturur ve hem hdrs
içindeki hem de srcs
kapsamındaki dosyaların yanı sıra, deps
kitaplığında yer alan hdrs
ve cc_*
içerisindeki dosyalardan da doğrudan eklenebilir.srcs
srcs
içindeki başlıklar doğrudan kitaplığın hdrs
ve srcs
içindeki dosyalardan doğrudan dahil edilmelidir. Üstbilgiyi hdrs
veya srcs
etiketi içine alıp almayacağınıza karar verirken bu kitaplıktaki tüketicilerin bu başlığı doğrudan dahil edip etmediklerini sormalısınız. Bu karar, programlama dillerindeki public
ile private
arasındaki görünürlük oranıyla neredeyse aynıdır.
cc_binary
ve cc_test
kurallarının dışa aktarılan arayüzü olmadığından hdrs
özelliği de yoktur. İkiliye veya teste ait olan tüm üst bilgiler srcs
içinde listelenmelidir.
Bu kuralları göstermek 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 eklemeler aşağıdaki tabloda listelenmiştir. Örneğin, foo.cc
, foo.h
ve bar.h
değerlerini doğrudan dahil edebilir, ancak baz.h
değerini içeremez.
Dosya dahil ediliyor | İzin verilen dahil etmeler |
---|---|
foo.h | bar. |
foo.cc | foo.h bar |
bar. | bar-impl.h.pazar |
bar-impl.h | bar. sa. sa. |
bar.cc | bar.sa. impl.h.baz |
pazar.h | baz-impl.h |
baz-impl.h | pazar.h |
pazar.cc | baz.h baz-impl.h |
Dahil etme kontrol kuralları yalnızca doğrudan dahil etmeler için geçerlidir. Yukarıdaki örnekte foo.cc
, bar.h
içerebilir. baz.h
içerebilir. Buna da baz-impl.h
eklenmesine izin verilir. Teknik olarak, bir .cc
dosyasının derlemesi, geçişli deps
kapatma işleminin herhangi bir cc_library
bölümünde hdrs
veya srcs
kapsamındaki tüm başlık dosyalarını toplu olarak içerebilir. Bu durumda, derleyici foo.cc
derleme yaparken baz.h
ve baz-impl.h
değerlerini okuyabilir ancak foo.cc
, #include "baz.h"
içermemelidir. Buna izin verilebilmesi için baz
, foo
öğesinin deps
listesine eklenmelidir.
Bazel, dahil etme kontrol kurallarının uygulanması için araç zinciri desteğine ihtiyaç duyar.
layering_check
özelliğinin, araç zinciri tarafından desteklenmesi ve açık bir şekilde istenmesi (ör. --features=layering_check
komut satırı işareti veya package
işlevinin features
parametresi) gerekir. Bazel tarafından sağlanan araç zincirleri, bu özelliği yalnızca Unix ve macOS'te clang ile destekler.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Bu hedef için benzersiz bir ad. |
deps
|
Bunlar |
srcs
|
Tüm Bir Tüm Bir kuralın adı
İzin verilen
...ve bu dosyaları üreten tüm kurallar. Farklı uzantılar, gcc kurallarına uygun şekilde farklı programlama dillerini belirtir. |
hdrs
|
Bu, kitaplık arayüzünü tanımlayan başlık dosyalarını bildirmek için tercih edilen konumdur. Bu başlıklar, bu kurala veya bağımlı kurallara dahil edilen kaynakların dahil edilmesi için kullanıma sunulacaktır.
Bu kitaplığın bir müşterisi tarafından eklenmesi amaçlanmamış olan başlıklar, yayınlanan bir başlıkta yer alsa bile |
alwayslink
|
srcs tarafından listelenen dosyaların tüm nesne dosyalarına (bazıları ikili program tarafından referans verilen herhangi bir simge içermiyor olsa bile) bağlantı verir.
Bu, kodunuz ikili programdaki kod tarafından açıkça çağrılmıyorsa (ör. kodunuz bir hizmet tarafından sağlanan bazı geri çağırmaları almak için kaydediliyorsa) yararlıdır.
Windows'da VS 2017 her zaman çalışmıyorsa bunun nedeni bilinen bir sorundur lütfen VS 2017'nizi en son sürüme geçirin. |
copts
|
Bu özellikteki her dize, ikili hedef derlenmeden önce belirtilen sırada
Paket |
defines
|
-D ifadesinin başına eklenir ve bu hedefe ve ona bağlı her kural için derleme komut satırına eklenir. Çok geniş kapsamlı etkileri olabileceği için çok dikkatli olun. Şüpheye düştüğünüzde tanım değerlerini local_defines öğesine ekleyin.
|
implementation_deps
|
deps kitaplığından farklı olarak, bu kitaplıkların başlıkları ve dahil edilen yolları (ve bunların tüm geçişli tanımlayıcıları) yalnızca bu kitaplığın derlenmesi için kullanılır. Bu kitaplıklara bağlı olan kitaplıklar kullanılmaz. implementation_deps ile belirtilen kitaplıklar, bu kitaplığa bağımlı ikili hedeflerde hâlâ bağlı.
Şimdilik kullanım cc_libraries ile sınırlıdır ve
|
include_prefix
|
Bu kural ayarlandığında, bu kuralın Bu özellik eklenmeden önce |
includes
|
"Değişken oluştur" değişikliğine tabidir.
Her dizenin başına Üstbilgiler, src'lere veya hdr'lere eklenmelidir. Aksi takdirde, derleme korumalı alana alındığında (varsayılan) bağlı kurallar tarafından kullanılamaz. |
linkopts
|
LINKOPTS öğesine eklenir.
Bu listenin |
linkstamp
|
base paketinde kullanılmalıdır.
|
linkstatic
|
cc_binary ve cc_test için ikili programı statik modda bağlayın. cc_library.linkstatic için: Aşağıya bakın.
Bu seçenek varsayılan olarak
Bu seçenek etkinleştirilirse ve bu bir ikili program veya test ise mümkün olduğunda kullanıcı kitaplıklarında derleme aracına Yürütülebilir dosyayı bağlamanın üç yolu vardır:
|
local_defines
|
-D ifadesinin başına eklenir ve bu hedefin derleme komut satırına eklenir ancak bağımlılarına eklenmez.
|
nocopts
|
COPTS (kuralın copts özelliğinde açıkça belirtilen değerler dahil) bu kuralı derlemek amacıyla COPTS öğesinden kaldırılacak.
Bu özelliğe nadiren ihtiyaç duyulmalıdır.
|
strip_include_prefix
|
Ayarlandığında, bu kuralın İlgili bir yol söz konusuysa bu, pakete bağlı bir yol olarak kabul edilir. Mutlak değer ise depoya bağlı bir yol olarak anlaşılır.
|
textual_hdrs
|
Bu, tek başına derlenemeyen başlık dosyalarının bildirilmesi için konumdur. Diğer bir deyişle, geçerli kod oluşturmak için diğer kaynak dosyaların her zaman metinsel olarak eklenmesi gerekir. |
win_def_file
|
Bu özellik yalnızca hedef platform Windows olduğunda kullanılmalıdır. Paylaşılan bir kitaplığı bağlarken simgeleri dışa aktarmak için kullanılabilir. |
cc_proto_kitaplığı
Kural kaynağını göstercc_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şturuyor.
deps
, proto_library
kurallarına yönlendirmelidir.
Ö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 |
Bu hedef için benzersiz bir ad. |
deps
|
proto_library kurallarının listesi.
|
cc_paylaşılan_kitaplık
Kural kaynağını göstercc_shared_library(name, deps, additional_linker_inputs, dynamic_deps, exports_filter, shared_lib_name, tags, user_link_flags, win_def_file)
Ortak bir kitaplık oluşturur.
Örnek
cc_shared_library( name = "foo_shared", deps = [ ":foo", ], dynamic_deps = [ ":bar_shared", ], additional_linker_inputs = [ ":foo.lds", ], user_link_flags = [ "-Wl,--version-script=$(location :foo.lds)", ], ) cc_library( name = "foo", srcs = ["foo.cc"], hdrs = ["foo.h"], deps = [ ":bar", ":baz", ], ) cc_shared_library( name = "bar_shared", shared_lib_name = "bar.so", deps = [":bar"], ) cc_library( name = "bar", srcs = ["bar.cc"], hdrs = ["bar.h"], ) cc_library( name = "baz", srcs = ["baz.cc"], hdrs = ["baz.h"], )
foo_shared
örneğinde foo
ve baz
statik olarak birbirine bağlıdır. İkincisi ise geçişli bir bağımlılıktır. Zaten dynamic_dep
bar_shared
tarafından dinamik olarak sağlandığından bar
bağlamaz.
foo_shared
, hangi simgelerin dışa aktarılacağını kontrol etmek için bir bağlayıcı komut dosyası *.lds dosyası kullanır. cc_shared_library
kural mantığı, hangi simgelerin dışa aktarılacağını denetlemez. Yalnızca iki paylaşılan kitaplık aynı hedefleri dışa aktarırsa analiz aşamasında hata vermek için dışa aktarıldığı varsayılır.
cc_shared_library
ürününün her doğrudan bağımlısı dışa aktarılmış olarak kabul edilir. Bu nedenle Bazel, analiz sırasında foo
ürününün foo_shared
tarafından dışa aktarıldığını varsayar. baz
dosyasının foo_shared
tarafından dışa aktarıldığı varsayılmaz. exports_filter
ile eşleşen her hedefin de dışa aktarıldığı varsayılır.
Örnekteki her cc_library
en fazla bir cc_shared_library
olmalıdır. baz
öğesini bar_shared
öğesine de bağlamak istersek
tags = ["LINKABLE_MORE_THAN_ONCE"]
öğesini baz
öğesine eklememiz gerekir.
shared_lib_name
özelliği nedeniyle bar_shared
tarafından oluşturulan dosyanın libbar.so
yerine bar.so
adı, varsayılan olarak Linux'ta kullanacağı ad olacaktır.
Hatalar
Two shared libraries in dependencies export the same symbols.
Bu durum, aynı hedefi dışa aktaran iki farklı cc_shared_library
bağımlısıyla hedef oluşturduğunuzda ortaya çıkar. Bu sorunu düzeltmek için cc_shared_library
bağımlılarından birinde kitaplıkların dışa aktarılmasını durdurmanız gerekir.
Two shared libraries in dependencies link the same library statically
Bu durum, aynı hedefi statik olarak birbirine bağlayan iki farklı cc_shared_library
bağımlısı içeren yeni bir cc_shared_library
oluşturduğunuzda gerçekleşir.
Dışa aktarmadaki hataya benzer.
Bunu düzeltmenin bir yolu, kitaplığı cc_shared_library
bağımlılıklarından birine bağlamayı durdurmaktır. Aynı zamanda hâlâ bağlantı kuran kitaplığın kitaplığı dışa aktarması gerekiyor. Böylece kitaplığı bağlamayan, simgelerin görünürlüğünü koruyor. Diğer bir yöntem de hedefi dışa aktaran üçüncü bir kitaplık çıkarmaktır.
Üçüncü yöntem, cc_library
suçlusunu LINKABLE_MORE_THAN_ONCE
ile etiketlemektir. Ancak bu düzeltme nadiren yapılır. cc_library
hizmetinin gerçekten birden fazla bağlantı oluşturmak için gerçekten güvenli olduğundan emin olmalısınız.
'//foo:foo' is already linked statically in '//bar:bar' but not exported`
Yani, deps
aracınızın geçişli kapatma işlemindeki bir kitaplıka cc_shared_library
bağımlılarından biri olmadan erişilebilir, ancak halihazırda dynamic_deps
içinde farklı bir cc_shared_library
öğesine bağlanmış ve dışa aktarılmaz.
Çözüm, verileri cc_shared_library
bağımlısından dışa aktarmak veya dışa aktaran üçüncü bir cc_shared_library
çekmektir.
Do not place libraries which only contain a precompiled dynamic library in deps.
Önceden derlenmiş bir dinamik kitaplığınız varsa bunun, şu anda oluşturmakta olduğunuz mevcut cc_shared_library
hedefine statik olarak bağlanmasına gerek yoktur. Bu nedenle, cc_shared_library
içindeki deps
öğesine ait değildir. Bu önceden derlenmiş dinamik kitaplık cc_libraries
cihazınızdan birine bağımlıysa doğrudan cc_library
işlevinin buna bağımlı olması gerekir.
Trying to export a library already exported by a different shared library
Geçerli kuralda, dinamik bağımlılıklarınızdan biri tarafından zaten dışa aktarılmış bir hedefi dışa aktardığınızı iddia ediyorsanız bu hatayı görürsünüz.
Bunu düzeltmek için hedefi deps
öğesinden kaldırın ve dinamik bağımlılıktan hedefleyin veya exports_filter
hedefinin bu hedefi yakalamadığından emin olun.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Bu hedef için benzersiz bir ad. |
deps
|
Bu doğrudan isteklerin geçişli kitaplık bağımlılığı,
Analiz sırasında kural uygulaması, birden fazla
Uygulama, aynı kitaplık statik olarak birden fazla |
additional_linker_inputs
|
user_link_flags özelliği aracılığıyla yapabilirsiniz.
|
dynamic_deps
|
cc_shared_library bağımlılıklarıdır.
|
exports_filter
|
Tüm
Bu özelliğin aslında bu hedeflere bir bağımlı kenar eklemediğini unutmayın. Bağımlı kenar, bunun yerine Aşağıdaki söz dizimine izin verilir: foo/BUILD içindeki herhangi bir hedefi hesaba katmak için foo/BUILD içindeki herhangi bir hedefi veya foo/ bar/BUILD gibi foo/altındaki herhangi bir paketi hesaba katmak için |
shared_lib_name
|
|
user_link_flags
|
cc_shared_library( name = "foo_shared", additional_linker_inputs = select({ "//src/conditions:linux": [ ":foo.lds", ":additional_script.txt", ], "//conditions:default": []}), user_link_flags = select({ "//src/conditions:linux": [ "-Wl,-rpath,kittens", "-Wl,--version-script=$(location :foo.lds)", "-Wl,--script=$(location :additional_script.txt)", ], "//conditions:default": []}), ... ) |
win_def_file
|
Bu özellik yalnızca hedef platform Windows olduğunda kullanılmalıdır. Paylaşılan bir kitaplığı bağlarken simgeleri dışa aktarmak için kullanılabilir. |
fdo_önceden_getirme_ipuçları
Kural kaynağını gösterfdo_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 bir FDO önceden getirme ipucu 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 |
Bu hedef için benzersiz bir ad. |
profile
|
|
fdo_profili
Kural kaynağını gösterfdo_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 |
Bu hedef için benzersiz bir ad. |
absolute_path_profile
|
|
profile
|
|
proto_profile
|
|
pervane_optimize et
Kural kaynağını gösterpropeller_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 |
Bu hedef için benzersiz bir ad. |
ld_profile
|
|
cc_test_
Kural kaynağını göstercc_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 |
Bu hedef için benzersiz bir ad. |
deps
|
Bunlar |
srcs
|
Tüm Bir Tüm Bir kuralın adı
İzin verilen
...ve bu dosyaları üreten tüm kurallar. Farklı uzantılar, gcc kurallarına uygun şekilde farklı programlama dillerini belirtir. |
additional_linker_inputs
|
Örneğin, derlenmiş Windows .res dosyaları burada ikili hedefe yerleştirilmek üzere sağlanabilir. |
copts
|
Bu özellikteki her dize, ikili hedef derlenmeden önce belirtilen sırada
Paket |
defines
|
-D ifadesinin başına eklenir ve bu hedefe ve ona bağlı her kural için derleme komut satırına eklenir. Çok geniş kapsamlı etkileri olabileceği için çok dikkatli olun. Şüpheye düştüğünüzde tanım değerlerini local_defines öğesine ekleyin.
|
includes
|
"Değişken oluştur" değişikliğine tabidir.
Her dizenin başına Üstbilgiler, src'lere veya hdr'lere eklenmelidir. Aksi takdirde, derleme korumalı alana alındığında (varsayılan) bağlı kurallar tarafından kullanılamaz. |
linkopts
|
LINKOPTS öğesine eklenir.
Bu listenin |
linkstatic
|
cc_binary ve cc_test için ikili programı statik modda bağlayın. cc_library.linkstatic için: Aşağıya bakın.
Bu seçenek varsayılan olarak
Bu seçenek etkinleştirilirse ve bu bir ikili program veya test ise mümkün olduğunda kullanıcı kitaplıklarında derleme aracına Yürütülebilir dosyayı bağlamanın üç yolu vardır:
|
local_defines
|
-D ifadesinin başına eklenir ve bu hedefin derleme komut satırına eklenir ancak bağımlılarına eklenmez.
|
malloc
|
Varsayılan olarak C++ ikili programları |
nocopts
|
COPTS (kuralın copts özelliğinde açıkça belirtilen değerler dahil) bu kuralı derlemek amacıyla COPTS öğesinden kaldırılacak.
Bu özelliğe nadiren ihtiyaç duyulmalıdır.
|
stamp
|
Damgalı ikili programlar, bağımlılıkları değişmediği sürece yeniden oluşturulmaz. |
win_def_file
|
Bu özellik yalnızca hedef platform Windows olduğunda kullanılmalıdır. Paylaşılan bir kitaplığı bağlarken simgeleri dışa aktarmak için kullanılabilir. |
cc_araç zinciri
Kural kaynağını göstercc_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 işlem
all_files
,compiler_files
,linker_files
gibi özellikler veya_files
ile biten diğer özellikler tarafından gerçekleştirilir. Bunlar genellikle gerekli tüm dosyaları küçülten dosya gruplarıdır. -
C++ işlemleri için doğru komut satırları oluşturuluyor. Bu işlem
CcToolchainConfigInfo
sağlayıcı kullanılarak yapılır (ayrıntılar aşağıdadır).
C++ araç zincirini yapılandırmak için toolchain_config
özelliğini kullanın.
Ayrıntılı C++ araç zinciri yapılandırması ve araç zinciri seçim dokümanları için bu
sayfaya
da bakın.
bazel build //...
çağrılırken araç zincirlerinin gereksiz yere oluşturulmasını ve yapılandırılmasını önlemek için tags = ["manual"]
kullanın
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Bu hedef için benzersiz bir ad. |
all_files
|
all_files 'ın yapı sağlayan diğer tüm özelliklerin bir üst kümesi olduğunu varsayar (ör.linkstamp derlemesinde hem derleme hem de bağlantı dosyaları olması gerekir). Bu nedenle all_files gereklidir).
|
ar_files
|
Arşivleme işlemleri için tüm cc_toolchain yapılarının toplanması gerekir. |
as_files
|
Montaj işlemleri için gerekli tüm cc_toolchain yapılarının toplanması. |
compiler
|
toolchain_identifier özelliğini kullanın. Bu,
Starlark'a CROSSTOOL taşıma
işleminden sonra bir noop olacak ve
#7075 tarafından kaldırılacaktır.
Ayarlandığında, çapraz araç_yapılandırması.toolchain seçimini yapmak için kullanılır. --cpu Bazel seçeneğine göre önceliklidir. |
compiler_files
|
|
compiler_files_without_includes
|
|
coverage_files
|
|
cpu
|
Ayarlandığında, çapraz araç_yapılandırması.toolchain seçimini yapmak için kullanılır. --cpu Bazel seçeneğine göre önceliklidir. |
dwp_files
|
|
dynamic_runtime_lib
|
Bu, "static_link_cpp_runtimes" özelliği etkinleştirildiğinde kullanılır ve bağımlılıkları dinamik olarak bağlarız. |
exec_transition_for_inputs
|
|
libc_top
|
|
linker_files
|
|
module_map
|
|
objcopy_files
|
|
static_runtime_lib
|
Bu, "static_link_cpp_runtimes" özelliği etkinleştirildiğinde kullanılır ve bağımlılıkları statik olarak bağlarız. |
strip_files
|
|
supports_header_parsing
|
|
supports_param_files
|
|
toolchain_config
|
cc_toolchain_config_info sağlayan kuralın etiketi.
|
toolchain_identifier
|
#5380 sorunu düzeltilene kadar |
cc_toolchain_level
Kural kaynağını göstercc_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ç zincirlerini bir araya getirme.
-
Bazel'e aktarılan
--cpu
ve--compiler
seçeneklerine bağlı olarak bir araç zinciri seçilir.
Ayrıntılı C++ araç zinciri yapılandırması ve araç zinciri seçim dokümanları için bu sayfaya da bakın.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Bu hedef için benzersiz bir ad. |
toolchains
|
cc_toolchain etiketine bir eşleme. Bazel'e yalnızca --cpu iletildiğinde "<cpu>", Bazel'a hem --cpu hem de --compiler iletildiğinde "<cpu>|<derleyici>" 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", }, ) |