Kurallar
- cc_binary
- cc_import
- cc_library
- cc_proto_library
- fdo_prefetch_hints
- fdo_profile
- propeller_optimize
- cc_test
- cc_toolchain
- cc_toolchain_suite
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 |
Bu hedef için benzersiz bir ad. |
deps
|
Bu URL'ler |
srcs
|
Tüm
Bir kuralın adı
İzin verilen
...ve bu dosyaları oluşturan kurallar. Farklı uzantılar, farklı programlama dillerini olduğunu unutmayın. |
additional_linker_inputs
|
Örneğin, derlenmiş Windows .res dosyaları buraya yerleştirilmek üzere ikili hedefi vardır. |
copts
|
Bu özellikteki her dize, belirtilen sırayla
Pakette özellik belirtilmişse
|
defines
|
-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
|
"Değişken yap" değişikliğine tabidir.
Her dizenin başına Ü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
|
LINKOPTS öğesine, önüne
çok önemlidir.
Bu listede |
linkshared
|
linkshared=True özelliğini ekleyin. Varsayılan olarak
bu seçenek kapalıdır.
Bu işaretin varlığı, bağlantı işleminin
Hem |
linkstatic
|
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
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 Yürütülebilir bir dosyayı bağlamanın üç farklı yolu vardır:
|
local_defines
|
-D eklenir ve bu hedef için derleme komut satırına eklenir,
ancak muhteliflerine değil.
|
malloc
|
Varsayılan olarak, C++ ikili programları |
nocopts
|
COPTS
(kuralın copts özelliğinde açıkça belirtilen değerler dahil olmak üzere),
COPTS .
Bu özelliğe nadiren ihtiyaç duyulur.
|
stamp
|
Bağımlılıkları değişmediği sürece damgalı ikili programlar yeniden oluşturulmaz. |
win_def_file
|
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, )
cc_import( name = "mylib", hdrs = ["mylib.h"], shared_library = "libmylib.so", )
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", )
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, )
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, )
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 |
Bu hedef için benzersiz bir ad. |
hdrs
|
|
alwayslink
|
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
|
İzin verilen dosya türleri:
|
shared_library
|
İzin verilen dosya türleri:
|
static_library
|
İzin verilen dosya türleri:
|
system_provided
|
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.h | bar.h |
foo.cc | foo.h bar.h |
bar.h | bar-impl.h baz.h |
çubuk-impl.h | bar.h baz.h |
bar.cc | bar.h bar-impl.h baz.h |
baz.h | baz-impl.h |
baz-impl.h | baz.h |
baz.cc | baz.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 |
Bu hedef için benzersiz bir ad. |
deps
|
Bu URL'ler |
srcs
|
Tüm
Bir kuralın adı
İzin verilen
...ve bu dosyaları oluşturan kurallar. Farklı uzantılar, farklı programlama dillerini olduğunu unutmayın. |
hdrs
|
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
|
alwayslink
|
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
|
Bu özellikteki her dize, belirtilen sırayla
Pakette özellik belirtilmişse
|
defines
|
-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
|
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
|
include_prefix
|
Ayarlandığında, bu kuralın
|
includes
|
"Değişken yap" değişikliğine tabidir.
Her dizenin başına Ü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
|
LINKOPTS öğesine, önüne
çok önemlidir.
Bu listede |
linkstamp
|
base paketi.
|
linkstatic
|
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
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 Yürütülebilir bir dosyayı bağlamanın üç farklı yolu vardır:
|
local_defines
|
-D eklenir ve bu hedef için derleme komut satırına eklenir,
ancak muhteliflerine değil.
|
nocopts
|
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
|
Ayarlandığında, bu kuralın 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.
|
textual_hdrs
|
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
|
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 |
Bu hedef için benzersiz bir ad. |
deps
|
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 |
Bu hedef için benzersiz bir ad. |
profile
|
|
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 |
Bu hedef için benzersiz bir ad. |
absolute_path_profile
|
|
profile
|
|
proto_profile
|
|
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 |
Bu hedef için benzersiz bir ad. |
ld_profile
|
|
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 |
Bu hedef için benzersiz bir ad. |
deps
|
Bu URL'ler |
srcs
|
Tüm
Bir kuralın adı
İzin verilen
...ve bu dosyaları oluşturan kurallar. Farklı uzantılar, farklı programlama dillerini olduğunu unutmayın. |
additional_linker_inputs
|
Örneğin, derlenmiş Windows .res dosyaları buraya yerleştirilmek üzere ikili hedefi vardır. |
copts
|
Bu özellikteki her dize, belirtilen sırayla
Pakette özellik belirtilmişse
|
defines
|
-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
|
"Değişken yap" değişikliğine tabidir.
Her dizenin başına Ü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
|
LINKOPTS öğesine, önüne
çok önemlidir.
Bu listede |
linkstatic
|
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
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 Yürütülebilir bir dosyayı bağlamanın üç farklı yolu vardır:
|
local_defines
|
-D eklenir ve bu hedef için derleme komut satırına eklenir,
ancak muhteliflerine değil.
|
malloc
|
Varsayılan olarak, C++ ikili programları |
nocopts
|
COPTS
(kuralın copts özelliğinde açıkça belirtilen değerler dahil olmak üzere),
COPTS .
Bu özelliğe nadiren ihtiyaç duyulur.
|
stamp
|
Bağımlılıkları değişmediği sürece damgalı ikili programlar yeniden oluşturulmaz. |
win_def_file
|
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 |
Bu hedef için benzersiz bir ad. |
all_files
|
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).
|
ar_files
|
Arşivleme işlemleri için gereken tüm cc_toolchain yapılarının koleksiyonu. |
as_files
|
Montaj işlemleri için gereken tüm cc_toolchain yapılarının koleksiyonu. |
compiler
|
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
|
|
compiler_files_without_includes
|
|
coverage_files
|
|
cpu
|
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
|
|
dynamic_runtime_lib
|
Bu parametre, "static_link_cpp_runtimes" etkinleştirildiğini görebilirsiniz. Şimdi de ve bunları dinamik bir şekilde gösterir. |
exec_transition_for_inputs
|
|
libc_top
|
|
linker_files
|
|
module_map
|
|
objcopy_files
|
|
static_runtime_lib
|
Bu parametre, "static_link_cpp_runtimes" etkinleştirildiğini görebilirsiniz. Şimdi de ve her şeyi statik olarak içerir. |
strip_files
|
|
supports_header_parsing
|
|
supports_param_files
|
|
toolchain_config
|
cc_toolchain_config_info özelliğini sağlayan kuralın etiketi.
|
toolchain_identifier
|
#5380 numaralı sorun düzeltilene kadar
|
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 |
Bu hedef için benzersiz bir ad. |
toolchains
|
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", }, ) |