[英]Bazel Package: How to export build artifacts to another directory with external dependency?
我是巴澤爾的新手。 我有一個用 Bazel 構建的項目。 它還使用了一些第三方庫,這些庫也是從 bazel 構建的(來自源代碼)。
我現在正在嘗試將我的項目作為獨立庫導出給其他人。 我可以將我的項目編譯為 so 並將相關的 hpp 文件復制到目錄中。
但我不知道如何處理第三方庫。 有沒有一種奇特的方法可以做到這一點? 或者我可以參考的任何例子?
我的目標是:
output:
包括/
圖書館/
如果您對第三方庫的BUILD
文件有控制權,您可以單獨暴露header文件,然后使用pkg_tar
規則收集主項目中的目標文件。
例如,假設一個文件夾結構如下:
.
|-- project
| |-- BUILD
| |-- mylib
| | |-- BUILD
| | |-- mylib.cpp
| | `-- mylib.h
| `-- WORKSPACE
`-- thirdparty
|-- lib1
| |-- BUILD
| |-- lib1.cpp
| `-- lib1.h
|-- lib2
| |-- BUILD
| |-- lib2.cpp
| `-- lib2.h
`-- WORKSPACE
您的第三方庫 BUILD 文件可能會公開filegroup
和cc_library
:
# thirdparty/lib1/BUILD
filegroup(
name = "headers",
srcs = ["lib1.h"],
visibility = ["//visibility:public"],
)
cc_library(
name = "lib1",
hdrs = [":headers"],
srcs=["lib1.cpp"],
visibility = ["//visibility:public"],
)
相同的模式將適用於thirdparty/lib2/BUILD
和project/mylib/BUILD
。
現在在主項目中,您可以有一個主要的BUILD
腳本,它將所有文件收集到一個tar
存檔中:
# project/BUILD
load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar")
pkg_tar(
name = "release_headers",
srcs = [
"//mylib:headers",
"@thirdparty//lib1:headers",
"@thirdparty//lib2:headers",
],
package_dir = "include",
)
pkg_tar(
name = "release_libs",
srcs = [
"//mylib",
"@thirdparty//lib1",
"@thirdparty//lib2",
],
package_dir = "lib",
)
pkg_tar(
name = "release",
deps = [
":release_headers",
":release_libs",
],
)
Building :release
應該創建一個具有所需結構的tar
文件:
$> bazel build :release
...
Target //:release up-to-date:
bazel-bin/release.tar
...
$> tar -tf bazel-bin/release.tar
./
./include/
./include/mylib.h
./include/lib1.h
./include/lib2.h
./lib/
./lib/libmylib.a
./lib/libmylib.so
./lib/liblib1.a
./lib/liblib1.so
./lib/liblib2.a
./lib/liblib2.so
您還可以在第三方工作區中為第三方庫設置pkg_tar
規則,以實現更好的模塊化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.