Kurallar
- cc_binary
- cc_import
- cc_library
- cc_shared_library
- cc_static_library
- cc_test
- cc_toolchain
- cc_toolchain_suite
- fdo_prefetch_hints
- fdo_profile
- memprof_profile
- propeller_optimize
cc_binary
Kural kaynağını görüntülemecc_binary(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, conlyopts, copts, cxxopts, defines, deprecation, distribs, dynamic_deps, env, exec_compatible_with, exec_properties, features, hdrs_check, includes, licenses, link_extra_lib, linkopts, linkshared, linkstatic, local_defines, malloc, module_interfaces, nocopts, output_licenses, reexport_deps, restricted_to, stamp, tags, target_compatible_with, testonly, toolchains, visibility, win_def_file)
Çalıştırılabilen bir ikili dosya oluşturur.
Hedefin
name
değeri, uygulamanın ana giriş noktası olan kaynak dosyanın adıyla (uzantı hariç) aynı olmalıdır.
Örneğin, giriş noktanız main.cc
ise adınız main
olmalıdır.
Örtülü çıkış hedefleri
name.stripped
(yalnızca açıkça istenirse derlenir): İkili programın stripped sürümü. Hata ayıklama sembollerini kaldırmak içinstrip -g
ikili program üzerinde çalıştırılır.--stripopt=-foo
kullanılarak komut satırında ek şerit seçenekleri sağlanabilir.name.dwp
(yalnızca açıkça istenirse derlenir): Fission etkinse uzaktan dağıtılan ikili dosyalarda hata ayıklama için uygun bir hata ayıklama bilgileri paketi dosyası. Aksi takdirde: Boş bir dosya.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
deps
|
Etiketler listesi; varsayılan değer Bunlar |
srcs
|
Etiketler listesi; varsayılan değer Tüm Saf derleyici dosyaları (.s, .asm) önceden işlenmez ve genellikle derleyici kullanılarak oluşturulur. Önceden işlenmiş derleme dosyaları (.S), önceden işlenir ve genellikle C/C++ derleyicisi kullanılarak derlenir.
Tüm
İzin verilen
... ve bu dosyaları oluşturan tüm kurallar (ör. |
data
|
Etiketler listesi; varsayılan değer data ile ilgili genel yorumları Çoğu derleme kuralı tarafından tanımlanan tipik özellikler bölümünde bulabilirsiniz.
Bir C++ kodunuz bu veri dosyalarına aşağıdaki gibi erişebilir:
|
additional_linker_inputs
|
Etiketler listesi; varsayılan değer Örneğin, derlenmiş Windows .res dosyaları, ikili hedefe yerleştirilmek üzere burada sağlanabilir. |
conlyopts
|
Dize listesi; varsayılan değer |
copts
|
Dize listesi; varsayılan değer
Bu özellikteki her dize, ikili hedef derlenmeden önce
Pakette özellik
|
cxxopts
|
Dize listesi; varsayılan değer |
defines
|
Dize listesi; varsayılan değer -D ile başa eklenir ve bu hedefin derleme komut satırına ve ona bağlı her kurala eklenir. Bunun geniş kapsamlı etkileri olabileceğinden çok dikkatli olun. Şüpheye düştüğünüzde bunun yerine local_defines için değer tanımlayın.
|
dynamic_deps
|
Etiketler listesi; varsayılan değer cc_shared_library bağımlılıklarıdır.
|
hdrs_check
|
Dize; varsayılan değer |
includes
|
Dize listesi; varsayılan değer -isystem path_to_package/include_entry oluşturur.
Bu, yalnızca #include ifadelerini yazma konusunda Google stilini kullanmayan üçüncü taraf kitaplıklar için kullanılmalıdır.
COPTS'tan farklı olarak bu işaretler bu kural ve ona bağlı her kural için eklenir. (Not: Bu, bağlı olduğu kurallar değildir.) Bunun geniş kapsamlı etkileri olabileceğinden çok dikkatli olun. Şüpheye düştüğünüzde bunun yerine COPTS alanına "-I" işaretleri ekleyin.
Eklenen |
link_extra_lib
|
Etiket; varsayılan değer
Varsayılan olarak C++ ikili dosyaları, varsayılan olarak |
linkopts
|
Dize listesi; varsayılan değer LINKOPTS öğesine eklenir.
Bu listedeki |
linkshared
|
Boole; varsayılan değer linkshared=True ekleyin. Bu seçenek varsayılan olarak kapalıdır.
Bu işaretin varlığı,
Hem |
linkstatic
|
Boole; varsayılan değer cc_binary ve cc_test için: İkiliyi statik modda bağlayın. cc_library.link_static için: Aşağıya bakın.
Bu seçenek varsayılan olarak
Etkinse ve bu bir ikili dosya veya testse bu seçenek, derleme aracına mümkün olduğunda kullanıcı kitaplıkları için Bir yürütülebilir dosyayı bağlamanın üç farklı yolu vardır:
Üretimde |
local_defines
|
Dize listesi; varsayılan değer -D ile başa eklenir ve bu hedefin derleme komut satırına eklenir ancak bağımlılarına eklenmez.
|
malloc
|
Etiket; varsayılan değer
Varsayılan olarak C++ ikili dosyaları |
module_interfaces
|
Etiketler listesi; varsayılan değer C++ Standard, modül arayüzü dosya uzantısı konusunda herhangi bir kısıtlamaya tabi değildir.
Kullanım, |
nocopts
|
Dize; varsayılan değer COPTS (kuralın copts özelliğinde açıkça belirtilen değerler dahil) bu kuralı derlemek amacıyla COPTS 'ten kaldırılır.
Bu özelliğin third_party dışında kullanılmasına veya gerekli olmasına gerek yoktur. Değerler, "Make" değişkeni yerine koyma işlemi dışında hiçbir şekilde önceden işlenmez.
|
reexport_deps
|
Etiketler listesi; varsayılan değer |
stamp
|
Tam sayı; varsayılan değer
Damgalanmış ikili dosyalar, bağımlılıkları değişmediği sürece yeniden oluşturulmaz. |
win_def_file
|
Etiket; varsayılan değer 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_import
Kural kaynağını görüntülemecc_import(name, deps, data, hdrs, alwayslink, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, includes, interface_library, linkopts, objects, pic_objects, pic_static_library, restricted_to, shared_library, static_library, system_provided, tags, target_compatible_with, testonly, toolchains, 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",
)
Unix'te:
cc_import(
name = "mylib",
hdrs = ["mylib.h"],
# libmylib.ifso is an interface library for libmylib.so which will be passed to linker
interface_library = "libmylib.ifso",
# libmylib.so will be available for runtime
shared_library = "libmylib.so",
)
Windows'da:
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",
)
system_provided=True
ile bağlama
Unix'te:
cc_import(
name = "mylib",
hdrs = ["mylib.h"],
interface_library = "libmylib.ifso", # Or we can also use libmylib.so as its own interface library
# libmylib.so is provided by system environment, for example it can be found in LD_LIBRARY_PATH.
# This indicates that Bazel is not responsible for making libmylib.so available.
system_provided = 1,
)
Windows'da:
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,
)
Unix'te:
cc_import(
name = "mylib",
hdrs = ["mylib.h"],
static_library = "libmylib.a",
shared_library = "libmylib.so",
)
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",
)
Geri kalan işlemler Unix ve Windows'ta aynıdır:
# first will link to libmylib.a (or libmylib.lib)
cc_binary(
name = "first",
srcs = ["first.cc"],
deps = [":mylib"],
linkstatic = 1, # default value
)
# second will link to libmylib.so (or libmylib.lib)
cc_binary(
name = "second",
srcs = ["second.cc"],
deps = [":mylib"],
linkstatic = 0,
)
cc_import
, dahil et ö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 |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
deps
|
Etiketler listesi; varsayılan değer deps ile ilgili genel yorumları Çoğu derleme kuralı tarafından tanımlanan tipik özellikler bölümünde bulabilirsiniz.
|
hdrs
|
Etiketler listesi; varsayılan değer |
alwayslink
|
Boole; varsayılan değer alwayslink, Windows'daki VS 2017 ile çalışmıyorsa bunun nedeni bilinen bir sorundur. Lütfen VS 2017'nizi en son sürüme yükseltin. |
includes
|
Dize listesi; varsayılan değer -isystem path_to_package/include_entry oluşturur.
Bu, yalnızca #include ifadelerini yazma konusunda Google stilini kullanmayan üçüncü taraf kitaplıklar için kullanılmalıdır.
COPTS'tan farklı olarak bu işaretler bu kural ve ona bağlı her kural için eklenir. (Not: Bu, bağlı olduğu kurallar değildir.) Bunun geniş kapsamlı etkileri olabileceğinden çok dikkatli olun. Şüpheye düştüğünüzde bunun yerine COPTS alanına "-I" işaretleri ekleyin.
Varsayılan |
interface_library
|
Etiket; varsayılan değer İzin verilen dosya türleri:
|
linkopts
|
Dize listesi; varsayılan değer LINKOPTS öğesine eklenir.
Bu listedeki |
objects
|
Etiketler listesi; varsayılan değer |
pic_objects
|
Etiketler listesi; varsayılan değer |
pic_static_library
|
Etiket; varsayılan değer |
shared_library
|
Etiket; varsayılan değer İzin verilen dosya türleri:
|
static_library
|
Etiket; varsayılan değer İzin verilen dosya türleri:
|
system_provided
|
Boole; varsayılan değer interface_library belirtilmeli ve shared_library boş bırakılmalıdır.
|
cc_library
Kural kaynağını görüntülemecc_library(name, deps, srcs, data, hdrs, additional_compiler_inputs, additional_linker_inputs, alwayslink, compatible_with, conlyopts, copts, cxxopts, defines, deprecation, distribs, exec_compatible_with, exec_properties, features, hdrs_check, implementation_deps, include_prefix, includes, licenses, linkopts, linkstamp, linkstatic, local_defines, module_interfaces, restricted_to, strip_include_prefix, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, win_def_file)
C++ derlenmiş kitaplıklar için cc_library()
kullanın.
Sonuç, gerekene bağlı olarak .so
, .lo
veya .a
olur.
Statik bağlantıyla bir cc_library
'e bağlı bir öğe oluşturursanız bağlı kitaplık kuralının çıkışı .a
dosyasıdır. alwayslink=True
değerini belirtirseniz .lo
dosyasını alırsınız.
Gerçek çıkış dosyası adı, ortak kitaplık için libfoo.so
olur. Burada foo, kuralın adıdır. Diğer kitaplık türleri sırasıyla .lo
ve .a
ile biter. Belirli bir paylaşılan kitaplık adına ihtiyacınız varsa (ör. bir Python modülü tanımlamak için) kitaplığı istediğiniz ada kopyalamak üzere bir genrule kullanın.
Başlık dahil etme kontrolü
Derlemede kullanılan tüm başlık dosyaları, cc_*
kurallarının hdrs
veya srcs
bölümünde bildirilmelidir.
Bu kural zorunlu kılındı.
cc_library
kurallarında, hdrs
içindeki başlıklar kitaplığın herkese açık arayüzünü içerir ve hem kitaplığın kendi hdrs
ve srcs
dosyalarından hem de cc_*
kurallarının deps
dosyalarındaki kitaplığı listeleyen hdrs
ve srcs
dosyalarından doğrudan eklenebilir.
srcs
içindeki başlıklar yalnızca kitaplığın hdrs
ve srcs
içindeki dosyalardan doğrudan eklenmelidir. hdrs
veya srcs
içine başlık ekleyip eklemeyeceğinize karar verirken bu kitaplığın tüketicilerinin bu başlığı doğrudan ekleyebilmesini isteyip istemediğinizi sormanız gerekir. Bu, programlama dillerinde public
ve private
görünürlüğü arasında karar vermekle yaklaşık olarak aynıdır.
cc_binary
ve cc_test
kurallarının dışa aktarılan bir arayüzü olmadığından hdrs
özellikleri de yoktur. Doğrudan ikili dosyaya veya teste ait tüm üstbilgiler srcs
içinde listelenmelidir.
Bu kuralları açıklamak 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 etme işlemleri aşağıdaki tabloda listelenmiştir.
Örneğin, foo.cc
'ün foo.h
ve bar.h
'yi doğrudan dahil etmesine izin verilir ancak baz.h
'e izin verilmez.
Dosya dahil | İzin verilen dahil etme işlemleri |
---|---|
foo.h | bar.h |
foo.cc | foo.h bar.h |
bar.h | bar-impl.h baz.h |
bar-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 etme denetimi kuralları yalnızca doğrudan dahil etme işlemleri için geçerlidir. Yukarıdaki örnekte foo.cc
'ün bar.h
içermesine izin verilir. bar.h
, baz.h
içerebilir. baz.h
ise baz-impl.h
içerebilir. Teknik olarak, bir .cc
dosyasının derlemesi, deps
kapatma işleminde bulunan herhangi bir cc_library
içindeki hdrs
veya srcs
içindeki herhangi bir başlık dosyasını aktarmalı olarak içerebilir. Bu durumda derleyici, foo.cc
'yi derlerken baz.h
ve baz-impl.h
'ü okuyabilir ancak foo.cc
, #include "baz.h"
içermemelidir. Buna izin verilebilmesi için baz
, foo
'nin deps
alanına eklenmelidir.
Bazel, dahil etme kontrol kurallarını uygulamak için araç zinciri desteğine ihtiyaç duyar.
layering_check
özelliğinin araç zinciri tarafından desteklenmesi ve açıkça istenmesi (örneğin, --features=layering_check
komut satırı işareti veya package
işlevinin features
parametresi aracılığıyla) gerekir. Bazel tarafından sağlanan araç zincirleri bu özelliği yalnızca Unix ve macOS'te clang ile destekler.
Örnekler
Ana ikili kod bu koda referans vermemesine rağmen bağlayıcıyı bu koda bağlantı oluşturmaya zorlamak için alwayslink
işaretini kullanırız.
cc_library(
name = "ast_inspector_lib",
srcs = ["ast_inspector_lib.cc"],
hdrs = ["ast_inspector_lib.h"],
visibility = ["//visibility:public"],
deps = ["//third_party/llvm/llvm/tools/clang:frontend"],
# alwayslink as we want to be able to call things in this library at
# debug time, even if they aren't used anywhere in the code.
alwayslink = 1,
)
Aşağıdaki örnek, third_party/python2_4_3/BUILD
sitesinden alınmıştır.
Kodun bir kısmı dl
kitaplığını kullanır (başka bir dinamik kitaplık yüklemek için). Bu nedenle bu kural, dl
kitaplığını bağlamak için -ldl
bağlantı seçeneğini belirtir.
cc_library(
name = "python2_4_3",
linkopts = [
"-ldl",
"-lutil",
],
deps = ["//third_party/expat"],
)
Aşağıdaki örnek third_party/kde/BUILD
'ten alınmıştır.
Hazır .so
dosyalarını depoda tutarız.
Başlık dosyaları, include
adlı bir alt dizinde bulunur.
cc_library(
name = "kde",
srcs = [
"lib/libDCOP.so",
"lib/libkdesu.so",
"lib/libkhtml.so",
"lib/libkparts.so",
...more .so files...,
],
includes = ["include"],
deps = ["//third_party/X11"],
)
Aşağıdaki örnek third_party/gles/BUILD
'ten alınmıştır.
Üçüncü taraf kodunun genellikle bazı defines
ve linkopts
öğelerine ihtiyacı vardır.
cc_library(
name = "gles",
srcs = [
"GLES/egl.h",
"GLES/gl.h",
"ddx.c",
"egl.c",
],
defines = [
"USE_FLOAT",
"__GL_FLOAT",
"__GL_COMMON",
],
linkopts = ["-ldl"], # uses dlopen(), dl library
deps = [
"es",
"//third_party/X11",
],
)
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
deps
|
Etiketler listesi; varsayılan değer Bunlar
Bunlar, C++ kitaplık kurallarının adları olmalıdır.
Bu kuralın kitaplığını bağlayan bir ikili dosyası oluşturduğunuzda, "deps" adına rağmen bu kitaplığın tüm istemcileri buraya ait değildir. Çalışma zamanındaki veri bağımlılıkları Önceden derlenmiş bir üçüncü taraf kitaplığını bağlamak için Bir öğeyi bu kitaplığa bağlamadan bağımlı hale getirmek için |
srcs
|
Etiketler listesi; varsayılan değer Tüm Saf derleyici dosyaları (.s, .asm) önceden işlenmez ve genellikle derleyici kullanılarak oluşturulur. Önceden işlenmiş derleme dosyaları (.S), önceden işlenir ve genellikle C/C++ derleyicisi kullanılarak derlenir.
Tüm
İzin verilen
... ve bu dosyaları oluşturan tüm kurallar (ör. |
data
|
Etiketler listesi; varsayılan değer data ile ilgili genel yorumları Çoğu derleme kuralı tarafından tanımlanan tipik özellikler bölümünde bulabilirsiniz.
Bir C++ kodunuz bu veri dosyalarına aşağıdaki gibi erişebilir:
|
hdrs
|
Etiketler listesi; varsayılan değer Kitaplığın arayüzünü tanımlayan başlık dosyalarını bildirmek için tercih edilen konum budur. Bu üstbilgiler, bu kuraldaki veya bağımlı kurallardaki kaynaklar tarafından dahil edilmek üzere kullanıma sunulur.
Bu kitaplığın bir müşterisi tarafından dahil edilmemesi amaçlanan üstbilgiler, yayınlanmış bir üstbilgi tarafından dahil edilse bile İzin verilen |
additional_compiler_inputs
|
Etiketler listesi; varsayılan değer |
additional_linker_inputs
|
Etiketler listesi; varsayılan değer Örneğin, derlenmiş Windows .res dosyaları, ikili hedefe yerleştirilmek üzere burada sağlanabilir. |
alwayslink
|
Boole; varsayılan değer srcs listesinde belirtilen dosyaların tüm nesne dosyalarını bağlar (bazılarında ikili dosya tarafından referans verilen simge olmasa bile).
Bu, kodunuz ikili programdaki kod tarafından açıkça çağrılmıyorsa (ör. kodunuz bir hizmet tarafından sağlanan geri çağırma işlevini almak için kaydoluyorsa) kullanışlıdır.
alwayslink, Windows'daki VS 2017 ile çalışmıyorsa bunun nedeni bilinen bir sorundur. Lütfen VS 2017'nizi en son sürüme yükseltin. |
conlyopts
|
Dize listesi; varsayılan değer |
copts
|
Dize listesi; varsayılan değer
Bu özellikteki her dize, ikili hedef derlenmeden önce
Pakette özellik
|
cxxopts
|
Dize listesi; varsayılan değer |
defines
|
Dize listesi; varsayılan değer -D ile başa eklenir ve bu hedefin derleme komut satırına ve ona bağlı her kurala eklenir. Bunun geniş kapsamlı etkileri olabileceğinden çok dikkatli olun. Şüpheye düştüğünüzde bunun yerine local_defines için değer tanımlayın.
|
hdrs_check
|
Dize; varsayılan değer |
implementation_deps
|
Etiketler listesi; varsayılan değer deps 'tekilerin aksine, bu kitaplıkların üstbilgileri ve dahil etme yolları (ve tüm geçişli bağımlılıkları) 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 hedeflerde hâlâ bağlıdır.
|
include_prefix
|
Dize; varsayılan değer Bu kuralın Bu ön ek eklenmeden önce Bu özellik yalnızca |
includes
|
Dize listesi; varsayılan değer -isystem path_to_package/include_entry oluşturur.
Bu, yalnızca #include ifadelerini yazma konusunda Google stilini kullanmayan üçüncü taraf kitaplıklar için kullanılmalıdır.
COPTS'tan farklı olarak bu işaretler bu kural ve ona bağlı her kural için eklenir. (Not: Bu, bağlı olduğu kurallar değildir.) Bunun geniş kapsamlı etkileri olabileceğinden çok dikkatli olun. Şüpheye düştüğünüzde bunun yerine COPTS alanına "-I" işaretleri ekleyin.
Eklenen |
linkopts
|
Dize listesi; varsayılan değer cc_binary.linkopts adresine göz atın.
linkopts özelliği, deps özellikleri aracılığıyla (veya benzer şekilde ele alınan diğer özellikler aracılığıyla: cc_binary 'in malloc özelliği) doğrudan veya dolaylı olarak bu kitaplığa bağımlı olan tüm hedeflere de uygulanır. Bağımlılık bağlantı seçenekleri, bağımlı bağlantı seçeneklerine göre önceliklidir (yani bağımlı bağlantı seçenekleri komut satırında daha sonra görünür). --linkopt bölümünde belirtilen bağlantı seçenekleri, kural bağlantı seçeneklerine göre önceliklidir.
Ayrıca, "-Wl,-soname" veya "-Xlinker -soname" seçeneklerinin desteklenmediğini ve bu özellikte hiçbir zaman belirtilmemesi gerektiğini unutmayın. |
linkstamp
|
Etiket; varsayılan değer base paketinde ihtiyaç duyulur.
|
linkstatic
|
Boole; varsayılan değer cc_binary ve cc_test için: İkiliyi statik modda bağlayın. cc_library.link_static için: Aşağıya bakın.
Bu seçenek varsayılan olarak
Etkinse ve bu bir ikili dosya veya testse bu seçenek, derleme aracına mümkün olduğunda kullanıcı kitaplıkları için Bir yürütülebilir dosyayı bağlamanın üç farklı yolu vardır:
Üretimde |
local_defines
|
Dize listesi; varsayılan değer -D ile başa eklenir ve bu hedefin derleme komut satırına eklenir ancak bağımlılarına eklenmez.
|
module_interfaces
|
Etiketler listesi; varsayılan değer C++ Standard, modül arayüzü dosya uzantısı konusunda herhangi bir kısıtlamaya tabi değildir.
Kullanım, |
strip_include_prefix
|
Dize; varsayılan değer Ayarlandığında, bu kuralın Göreli bir yolsa pakete göreli bir yol olarak alınır. Mutlak bir yol ise depoya göreli yol olarak anlaşılır.
Bu özellik yalnızca |
textual_hdrs
|
Etiketler listesi; varsayılan değer Bu, tek başına derlenemeyen başlık dosyalarının tanımlandığı yerdir. Yani geçerli kod oluşturmak için her zaman diğer kaynak dosyalar tarafından metinsel olarak eklenmesi gerekir. |
win_def_file
|
Etiket; varsayılan değer 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_shared_library
Kural kaynağını görüntülemecc_shared_library(name, deps, additional_linker_inputs, compatible_with, deprecation, distribs, dynamic_deps, exec_compatible_with, exec_properties, experimental_disable_topo_sort_do_not_use_remove_before_7_0, exports_filter, features, restricted_to, roots, shared_lib_name, static_deps, tags, target_compatible_with, testonly, toolchains, user_link_flags, visibility, win_def_file)
Paylaşılan 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"], )
Örnekte foo_shared
, foo
ve baz
'yi statik olarak bağlar. baz
, geçişli bir bağımlılıktır. dynamic_dep
bar_shared
tarafından zaten dinamik olarak sağlandığı için bar
bağlantısı eklenmez.
foo_shared
, hangi sembollerin 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 sembollerin dışa aktarılacağını kontrol etmez. 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ılan öğeleri kullanır.
cc_shared_library
'ün her doğrudan bağımlılığının dışa aktarıldığı varsayılır. Bu nedenle Bazel, analiz sırasında foo
'in foo_shared
tarafından dışa aktarıldığını varsayar. baz
, 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
içinde görünmelidir. baz
'ü bar_shared
'a da bağlamak isteseydik tags = ["LINKABLE_MORE_THAN_ONCE"]
'yi baz
'e eklememiz gerekirdi.
shared_lib_name
özelliği nedeniyle, bar_shared
tarafından üretilen dosyanın adı Linux'da varsayılan olarak libbar.so
yerine bar.so
olur.
Hatalar
Two shared libraries in dependencies export the same symbols.
Bu durum, aynı hedefi dışa aktaran iki farklı cc_shared_library
bağımlılığı olan bir hedef oluşturduğunuzda ortaya çıkar. Bu sorunu düzeltmek için kitaplıkların cc_shared_library
bağımlılıkları arasından birinde dışa aktarılmasını durdurmanız gerekir.
Two shared libraries in dependencies link the same library statically
Bu durum, aynı hedefi statik olarak bağlayan iki farklı cc_shared_library
bağımlılığı olan yeni bir cc_shared_library
oluşturduğunuzda ortaya çıkar.
Dışa aktarma işlemiyle ilgili hataya benzer.
Bu sorunu düzeltmenin bir yolu, kitaplığı cc_shared_library
bağımlılıkları arasından birine bağlamayı durdurmaktır. Aynı zamanda, kitaplığı hâlâ bağlayan kullanıcının kitaplığı dışa aktarması gerekir. Böylece, kitaplığı bağlamayan kullanıcı simgelere erişmeye devam edebilir. Hedefi dışa aktaran üçüncü bir kitaplık da kullanabilirsiniz.
Üçüncü yöntem, soruna neden olan cc_library
öğesini LINKABLE_MORE_THAN_ONCE
ile etiketlemektir. Ancak bu düzeltme nadiren kullanılmalıdır ve cc_library
öğesinin birden fazla kez bağlantı vermenin güvenli olduğundan emin olmanız gerekir.
'//foo:foo' is already linked statically in '//bar:bar' but not exported`
Bu, deps
'ün geçişli kapatma kapsamındaki bir kitaplığa cc_shared_library
bağımlılıkları kullanmadan erişilebildiği ancak dynamic_deps
'de farklı bir cc_shared_library
'a bağlı olduğu ve dışa aktarılmadığı anlamına gelir.
Çözüm, cc_shared_library
bağımlılığından dışa aktarmak veya dışa aktaran üçüncü bir cc_shared_library
'ü kullanmaktır.
Do not place libraries which only contain a precompiled dynamic library in deps.
Önceden derlenmiş bir dinamik kitaplığınız varsa bu kitaplığın, şu anda oluşturduğunuz mevcut cc_shared_library
hedefine statik olarak bağlanması gerekmez ve bağlanamaz. Bu nedenle, cc_shared_library
'un deps
bölümüne ait değildir. Bu önceden derlenmiş dinamik kitaplık, cc_libraries
'lerinizden birinin bağımlılığıysa cc_library
'ın doğrudan bu kitaplığa bağımlı olması gerekir.
Trying to export a library already exported by a different shared library
Mevcut kuralda, dinamik bağımlılıklarınızdan biri tarafından zaten dışa aktarılan bir hedefi dışa aktardığınızı iddia ediyorsanız bu hatayı görürsünüz.
Bunu düzeltmek için hedefi deps
'ten kaldırın ve dinamik bağımlılıktan yararlanın veya exports_filter
'ın bu hedefi yakalamadığından emin olun.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
deps
|
Etiketler listesi; varsayılan değer
Bu doğrudan bağımlılıkların geçişli kitaplık bağımlılıkları,
Analiz sırasında kural uygulaması, birden fazla
Aynı kitaplık birden fazla |
additional_linker_inputs
|
Etiketler listesi; varsayılan değer user_link_flags özelliği aracılığıyla yapabilirsiniz.
|
dynamic_deps
|
Etiketler listesi; varsayılan değer cc_shared_library bağımlılıklarıdır.
|
experimental_disable_topo_sort_do_not_use_remove_before_7_0
|
Boole; varsayılan değer |
exports_filter
|
Dize listesi; varsayılan değer
Paylaşılan kitaplık tarafından dışa aktarıldığı anlaşılan tüm hedefler
Bu özelliğin aslında bu hedeflere bir bağımlılık kenarı eklemediğini, bunun yerine bağımlılık kenarının Aşağıdaki söz dizimine izin verilir: foo/BUILD'deki tüm hedefleri hesaba katmak için foo/BUILD veya foo/ altındaki diğer paketlerdeki (ör. foo/bar/BUILD) tüm hedefleri hesaba katmak için |
roots
|
Etiketler listesi; varsayılan değer |
shared_lib_name
|
Dize; varsayılan değer |
static_deps
|
Dize listesi; varsayılan değer |
user_link_flags
|
Dize listesi; varsayılan değer
|
win_def_file
|
Etiket; varsayılan değer 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_static_library
Kural kaynağını görüntülemecc_static_library(name, deps, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
--experimental_cc_static_library
işaretiyle kullanılabilir.
Hedeflerin ve bunların geçişli bağımlılıklarının listesinden statik bir kitaplık oluşturur.
Elde edilen statik kitaplık, deps
içinde listelenen hedeflerin nesne dosyalarını ve geçişli bağımlılıklarını içerir. Bu işlemde PIC
nesnelerine öncelik verilir.
Çıkış grupları
linkdeps
deps
içinde listelenen ve statik kitaplığa herhangi bir nesne dosyası sağlamayan ancak en az bir statik, dinamik veya arayüz kitaplığı sağlayan hedeflerin geçişli bağımlılıklarının etiketlerini içeren bir metin dosyası. Elde edilen statik kitaplık için bu kitaplıkların bağlantı sırasında mevcut olması gerekebilir.
linkopts
deps
dosyasında listelenen hedeflerin tüm geçişli bağımlılıklarının kullanıcı tarafından sağlanan linkopts
dosyasını içeren bir metin dosyası.
Yinelenen simgeler
Varsayılan olarak cc_static_library
kuralı, oluşturulan statik kitaplığın yinelenen simge içermediğini kontrol eder. Bu durumda derleme, yinelenen simgeleri ve bunları içeren nesne dosyalarını listeleyen bir hata mesajıyla başarısız olur.
Bu kontrol, features = ["-symbol_check"]
ayarlanarak hedef veya paket başına veya --features=-symbol_check
aracılığıyla dünya genelinde devre dışı bırakılabilir.
symbol_check
için araç seti desteği
Bazel ile birlikte gönderilen otomatik olarak yapılandırılan C++ araç zincirleri, symbol_check
özelliğini tüm platformlarda destekler. Özel araç zincirleri, iki yöntemden biriyle bu sürüme destek ekleyebilir:
ACTION_NAMES.validate_static_library
işlemini uygulama vesymbol_check
özelliğiyle etkinleştirme. İşlemde ayarlanan araç, iki bağımsız değişkenle çağrılır: yinelenen sembolleri kontrol edecek statik kitaplık ve kontrol başarılı olursa oluşturulması gereken dosyanın yolu.symbol_check
özelliğinin, arşivleyici işaretleri eklemesi, statik kitaplığı oluşturan işlemin yinelenen simgelerde başarısız olmasına neden olur.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
deps
|
Etiketler listesi; varsayılan değer Nesne dosyası sağlamayan bağımlılıklar statik kitaplığa dahil edilmez ancak etiketleri |
cc_test
Kural kaynağını görüntülemecc_test(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, conlyopts, copts, cxxopts, defines, deprecation, distribs, dynamic_deps, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, hdrs_check, includes, licenses, link_extra_lib, linkopts, linkshared, linkstatic, local, local_defines, malloc, module_interfaces, nocopts, reexport_deps, restricted_to, shard_count, size, stamp, tags, target_compatible_with, testonly, timeout, toolchains, visibility, win_def_file)
cc_test()
kuralı bir testi derleyebilir. Burada test, bazı test kodlarının etrafına yerleştirilmiş bir ikili sarmalayıcıdır.
C++ testleri varsayılan olarak dinamik olarak bağlanır.
Bir birim testini statik olarak bağlamak için linkstatic=True
değerini belirtin.
Testinizin neden linkstatic
'ye ihtiyaç duyduğunu açıklamanız faydalı olabilir.
Örtülü çıkış hedefleri
name.stripped
(yalnızca açıkça istenirse derlenir): İkili programın stripped sürümü. Hata ayıklama sembollerini kaldırmak içinstrip -g
ikili program üzerinde çalıştırılır.--stripopt=-foo
kullanılarak komut satırında ek şerit seçenekleri sağlanabilir.name.dwp
(yalnızca açıkça istenirse derlenir): Fission etkinse uzaktan dağıtılan ikili dosyalarda hata ayıklama için uygun bir hata ayıklama bilgileri paketi dosyası. Aksi takdirde: Boş bir dosya.
cc_binary() bağımsız değişkenlerine bakın. Bununla birlikte, stamp
bağımsız değişkeni testler için varsayılan olarak 0 olarak ayarlanır ve cc_test
bağımsız değişkeninde tüm test kurallarında ortak olan
ek özellikler (*_test) bulunur.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
deps
|
Etiketler listesi; varsayılan değer Bunlar |
srcs
|
Etiketler listesi; varsayılan değer Tüm Saf derleyici dosyaları (.s, .asm) önceden işlenmez ve genellikle derleyici kullanılarak oluşturulur. Önceden işlenmiş derleme dosyaları (.S), önceden işlenir ve genellikle C/C++ derleyicisi kullanılarak derlenir.
Tüm
İzin verilen
... ve bu dosyaları oluşturan tüm kurallar (ör. |
data
|
Etiketler listesi; varsayılan değer data ile ilgili genel yorumları Çoğu derleme kuralı tarafından tanımlanan tipik özellikler bölümünde bulabilirsiniz.
Bir C++ kodunuz bu veri dosyalarına aşağıdaki gibi erişebilir:
|
additional_linker_inputs
|
Etiketler listesi; varsayılan değer Örneğin, derlenmiş Windows .res dosyaları, ikili hedefe yerleştirilmek üzere burada sağlanabilir. |
conlyopts
|
Dize listesi; varsayılan değer |
copts
|
Dize listesi; varsayılan değer
Bu özellikteki her dize, ikili hedef derlenmeden önce
Pakette özellik
|
cxxopts
|
Dize listesi; varsayılan değer |
defines
|
Dize listesi; varsayılan değer -D ile başa eklenir ve bu hedefin derleme komut satırına ve ona bağlı her kurala eklenir. Bunun geniş kapsamlı etkileri olabileceğinden çok dikkatli olun. Şüpheye düştüğünüzde bunun yerine local_defines için değer tanımlayın.
|
dynamic_deps
|
Etiketler listesi; varsayılan değer cc_shared_library bağımlılıklarıdır.
|
hdrs_check
|
Dize; varsayılan değer |
includes
|
Dize listesi; varsayılan değer -isystem path_to_package/include_entry oluşturur.
Bu, yalnızca #include ifadelerini yazma konusunda Google stilini kullanmayan üçüncü taraf kitaplıklar için kullanılmalıdır.
COPTS'tan farklı olarak bu işaretler bu kural ve ona bağlı her kural için eklenir. (Not: Bu, bağlı olduğu kurallar değildir.) Bunun geniş kapsamlı etkileri olabileceğinden çok dikkatli olun. Şüpheye düştüğünüzde bunun yerine COPTS alanına "-I" işaretleri ekleyin.
Eklenen |
link_extra_lib
|
Etiket; varsayılan değer
Varsayılan olarak C++ ikili dosyaları, varsayılan olarak |
linkopts
|
Dize listesi; varsayılan değer LINKOPTS öğesine eklenir.
Bu listedeki |
linkshared
|
Boole; varsayılan değer linkshared=True ekleyin. Bu seçenek varsayılan olarak kapalıdır.
Bu işaretin varlığı,
Hem |
linkstatic
|
Boole; varsayılan değer cc_binary ve cc_test için: İkiliyi statik modda bağlayın. cc_library.link_static için: Aşağıya bakın.
Bu seçenek varsayılan olarak
Etkinse ve bu bir ikili dosya veya testse bu seçenek, derleme aracına mümkün olduğunda kullanıcı kitaplıkları için Bir yürütülebilir dosyayı bağlamanın üç farklı yolu vardır:
Üretimde |
local_defines
|
Dize listesi; varsayılan değer -D ile başa eklenir ve bu hedefin derleme komut satırına eklenir ancak bağımlılarına eklenmez.
|
malloc
|
Etiket; varsayılan değer
Varsayılan olarak C++ ikili dosyaları |
module_interfaces
|
Etiketler listesi; varsayılan değer C++ Standard, modül arayüzü dosya uzantısı konusunda herhangi bir kısıtlamaya tabi değildir.
Kullanım, |
nocopts
|
Dize; varsayılan değer COPTS (kuralın copts özelliğinde açıkça belirtilen değerler dahil) bu kuralı derlemek amacıyla COPTS 'ten kaldırılır.
Bu özelliğin third_party dışında kullanılmasına veya gerekli olmasına gerek yoktur. Değerler, "Make" değişkeni yerine koyma işlemi dışında hiçbir şekilde önceden işlenmez.
|
reexport_deps
|
Etiketler listesi; varsayılan değer |
stamp
|
Tam sayı; varsayılan değer
Damgalanmış ikili dosyalar, bağımlılıkları değişmediği sürece yeniden oluşturulmaz. |
win_def_file
|
Etiket; varsayılan değer 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_toolchain
Kural kaynağını görüntülemecc_toolchain(name, all_files, ar_files, as_files, compatible_with, compiler_files, compiler_files_without_includes, coverage_files, deprecation, distribs, dwp_files, dynamic_runtime_lib, exec_compatible_with, exec_properties, exec_transition_for_inputs, features, libc_top, licenses, linker_files, module_map, objcopy_files, output_licenses, restricted_to, static_runtime_lib, strip_files, supports_header_parsing, supports_param_files, tags, target_compatible_with, testonly, toolchain_config, toolchain_identifier, toolchains, visibility)
C++ araç zincirini temsil eder.
Bu kural aşağıdakilerden sorumludur:
-
C++ işlemlerinin çalıştırılması için gereken tüm yapıları toplama. Bu,
all_files
,compiler_files
,linker_files
veya_files
ile biten diğer özellikler gibi özelliklerle yapılır. Bunlar genellikle gerekli tüm dosyaları gruplandıran dosya gruplarıdır. -
C++ işlemleri için doğru komut satırlarını oluşturma. 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.
Ayrıntılı C++ araç zinciri yapılandırması ve araç zinciri seçim dokümanları için bu
sayfada
da bilgi bulabilirsiniz.
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 |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
all_files
|
Etiket; zorunlu Tüm cc_toolchain yapılarının koleksiyonu. Bu yapı taşları, rules_cc ile ilgili tüm işlemlere giriş olarak eklenir (aşağıdaki özelliklerden daha hassas yapı taşı kümeleri kullanan işlemler hariç). Bazel,all_files 'ün diğer tüm yapı sağlayıcı özelliklerinin bir üst kümesi olduğunu varsayar (ör. bağlantı damgası derlemesi hem derleme hem de bağlantı dosyalarına ihtiyaç duyar, bu nedenle all_files alır).
|
ar_files
|
Etiket; varsayılan değer |
as_files
|
Etiket; varsayılan değer |
compiler_files
|
Etiket; zorunlu Derleme işlemleri için gereken tüm cc_toolchain yapılarını içeren koleksiyon. |
compiler_files_without_includes
|
Etiket; varsayılan değer |
coverage_files
|
Etiket; varsayılan değer |
dwp_files
|
Etiket; zorunlu dwp işlemleri için gereken tüm cc_toolchain yapılarını içeren koleksiyon. |
dynamic_runtime_lib
|
Etiket; varsayılan değer 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
|
Boole; varsayılan değer |
libc_top
|
Etiket; varsayılan değer |
linker_files
|
Etiket; zorunlu İşlemleri bağlamak için gereken tüm cc_toolchain yapılarını içeren koleksiyon. |
module_map
|
Etiket; varsayılan değer |
objcopy_files
|
Etiket; zorunlu objcopy işlemleri için gereken tüm cc_toolchain yapılarını içeren koleksiyon. |
output_licenses
|
Dize listesi; varsayılan değer |
static_runtime_lib
|
Etiket; varsayılan değer Bu, "static_link_cpp_runtimes" özelliği etkinleştirildiğinde ve bağımlılıkları statik olarak bağladığımızda kullanılır. |
strip_files
|
Etiket; zorunlu Sarma işlemleri için gereken tüm cc_toolchain yapılarını içeren koleksiyon. |
supports_header_parsing
|
Boole; varsayılan değer |
supports_param_files
|
Boole; varsayılan değer |
toolchain_config
|
Etiket; zorunlu cc_toolchain_config_info sağlayan kuralın etiketi.
|
toolchain_identifier
|
Dize; varsayılan değer
#5380 sorunu düzeltilene kadar |
cc_toolchain_suite
Kural kaynağını görüntülemecc_toolchain_suite(name, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Desteği sonlandırıldı: Kural işlem yapmaz ve kaldırılacaktır.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
fdo_prefetch_hints
Kural kaynağını görüntülemefdo_prefetch_hints(name, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, profile, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Çalışma alanındaki bir FDO ön getirme ipuçları profilini temsil eder. Örnekler:
fdo_prefetch_hints(
name = "hints",
profile = "//path/to/hints:profile.afdo",
)
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
profile
|
Etiket; zorunlu İpuçları profilinin etiketi. İpuçları dosyası .afdo uzantısına sahiptir. Etiket, fdo_absolute_path_profile kuralını da işaret edebilir. |
fdo_profile
Kural kaynağını görüntülemefdo_profile(name, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, memprof_profile, profile, proto_profile, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Çalışma alanındaki bir FDO profilini temsil eder. Örnek:
fdo_profile(
name = "fdo",
profile = "//path/to/fdo:profile.zip",
)
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
memprof_profile
|
Etiket; varsayılan değer |
profile
|
Etiket; zorunlu FDO profilinin etiketi veya onu oluşturan bir kural. FDO dosyasının uzantısı aşağıdakilerden biri olabilir: dizine eklenmemiş 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, fdo_absolute_path_profile kuralını da işaret edebilir. |
proto_profile
|
Etiket; varsayılan değer |
memprof_profile
Kural kaynağını görüntülemememprof_profile(name, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, profile, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Çalışma alanındaki bir MEMPROF profilini temsil eder. Örnek:
memprof_profile(
name = "memprof",
profile = "//path/to/memprof:profile.afdo",
)
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
profile
|
Etiket; zorunlu MEMPROF profilinin etiketi. Profilin .profdata uzantısı (dizine eklenen/sembolleştirilmiş bir memprof profili için) veya memprof .profdata dosyası içeren bir zip dosyası için.zip uzantısı olması gerekir. Etiket, fdo_absolute_path_profile kuralını da işaret edebilir. |
propeller_optimize
Kural kaynağını görüntülemepropeller_optimize(name, cc_profile, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, ld_profile, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Workspace'te bir Propeller optimizasyon profilini temsil eder. Örnek:
propeller_optimize(
name = "layout",
cc_profile = "//path:cc_profile.txt",
ld_profile = "//path:ld_profile.txt"
)
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
cc_profile
|
Etiket; zorunlu Çeşitli derleme işlemlerine iletilen profilin etiketi. Bu dosyanın uzantısı .txt olmalıdır. |
ld_profile
|
Etiket; zorunlu Bağlantı işlemine iletilen profilin etiketi. Bu dosyanın uzantısı .txt olmalıdır. |