Burada C++ projeleri oluşturmak için en yaygın kullanım alanlarından bazılarını bulabilirsiniz yardımcı olabilir. Henüz yapmadıysanız C++ derlemeye başlayın. bir projeyi yönetmek için Bazel'e giriş: C++ projesi oluşturma.
cc_library ve hdrs üstbilgisi dosyaları hakkında bilgi için bkz. cc_library öğesini seçin.
Bir hedefe birden fazla dosya ekleme
Birden çok dosyayı tek bir hedefe dahil edebilirsiniz. glob ifadesini yükleyin. Örneğin:
cc_library(
name = "build-all-the-files",
srcs = glob(["*.cc"]),
hdrs = glob(["*.h"]),
)
Bu hedefle Bazel, .cc
ve .h
bu hedefi içeren BUILD
dosyasıyla aynı dizin (hariç tutulan)
alt dizinler) için de kullanılabilir.
Geçişli dahil etme özelliğini kullanma
Bir dosyada başlık varsa kaynak olarak bu dosyayı içeren tüm kurallar (yani
srcs
, hdrs
veya textual_hdrs
özelliğine eklenmiş olması gerekir)
eklenen başlığın kitaplık kuralına bağlıdır. Öte yandan, yalnızca doğrudan
bağımlılıklar
bağımlılık olarak belirtilmelidir. Örneğin,
sandwich.h
bread.h
içerir, bread.h
ise flour.h
içerir. sandwich.h
.
flour.h
içermiyor (kim sandviçinde un istiyor?), bu nedenle BUILD
dosyası şöyle görünür:
cc_library(
name = "sandwich",
srcs = ["sandwich.cc"],
hdrs = ["sandwich.h"],
deps = [":bread"],
)
cc_library(
name = "bread",
srcs = ["bread.cc"],
hdrs = ["bread.h"],
deps = [":flour"],
)
cc_library(
name = "flour",
srcs = ["flour.cc"],
hdrs = ["flour.h"],
)
Burada sandwich
kitaplığı şuna göre bread
kitaplığına bağlıdır:
(flour
kitaplığında)
Dahil etme yolları
Bazen, çalışma alanındaki yollar için root işlemi yapamazsınız (veya bunu yapmak istemezsiniz) kök. Mevcut kitaplıklarda, çalışma alanınızdaki yolla eşleşmelidir. Örneğin, aşağıdaki gibi olduğunu varsayalım: dizin yapısı:
└── my-project
├── legacy
│ └── some_lib
│ ├── BUILD
│ ├── include
│ │ └── some_lib.h
│ └── some_lib.cc
└── MODULE.bazel
Bazel, some_lib.h
öğesinin
legacy/some_lib/include/some_lib.h
, ancak diyelim ki some_lib.cc
"some_lib.h"
. Bu dahil etme yolunu geçerli kılmak için
legacy/some_lib/BUILD
öğesinin, some_lib/include
dizin, bir "dahil etme" dizinidir:
cc_library(
name = "some_lib",
srcs = ["some_lib.cc"],
hdrs = ["include/some_lib.h"],
copts = ["-Ilegacy/some_lib/include"],
)
Bu, özellikle başlık dosyaları gibi harici bağımlılıklar için yararlıdır.
aksi takdirde /
önekiyle eklenmelidir.
Harici kitaplıkları dahil et
Google Test'i kullandığınızı varsayalım.
{: .external}.
MODULE.bazel
dosyasında buna bir bağımlılık ekleyebilirsiniz.
Google Test'i indirin ve deponuzda kullanılabilir hale getirin:
bazel_dep(name = "googletest", version = "1.15.2")
C++ testleri yazma ve çalıştırma
Örneğin, aşağıdaki gibi bir test ./test/hello-test.cc
oluşturabilirsiniz:
#include "gtest/gtest.h"
#include "main/hello-greet.h"
TEST(HelloTest, GetGreet) {
EXPECT_EQ(get_greet("Bazel"), "Hello Bazel");
}
Ardından testleriniz için ./test/BUILD
dosyası oluşturun:
cc_test(
name = "hello-test",
srcs = ["hello-test.cc"],
copts = [
"-Iexternal/gtest/googletest/include",
"-Iexternal/gtest/googletest",
],
deps = [
"@googletest//:main",
"//main:hello-greet",
],
)
hello-greet
öğesinin hello-test
tarafından görülebilmesi için şunu eklemeniz gerekir:
./main/BUILD
öğesindeki visibility
özelliğine "//test:__pkg__",
.
Artık testi çalıştırmak için bazel test
kullanabilirsiniz.
bazel test test:hello-test
Bu işlem şu çıkışı üretir:
INFO: Found 1 test target...
Target //test:hello-test up-to-date:
bazel-bin/test/hello-test
INFO: Elapsed time: 4.497s, Critical Path: 2.53s
//test:hello-test PASSED in 0.3s
Executed 1 out of 1 tests: 1 test passes.
Önceden derlenmiş kitaplıklara bağımlılık ekleme
Sadece derlenmiş sürümüne sahip olduğunuz bir kitaplığı kullanmak istiyorsanız (
örnek, başlıklar ve bir .so
dosyası) bir cc_library
kuralına sarmalayın:
cc_library(
name = "mylib",
srcs = ["mylib.so"],
hdrs = ["mylib.h"],
)
Bu şekilde, çalışma alanınızdaki diğer C++ hedefleri bu kurala bağlı olabilir.