作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个仅 header 的cc_library。每当我尝试自行编译此类库时,它实际上都不会编译任何内容。我故意放一些错误,以尝试在编译时获得此类错误,但bazel实际上并未编译任何内容。这是一个小例子。
// test.h
This should not compile fdsafdsafdsa
int foo() { return 1; }
# BUILD
cc_library(
name = 'test',
hdrs = ['test.h']
)
// bazel build :test
INFO: Analyzed target //:test (2 packages loaded, 3 targets configured).
INFO: Found 1 target...
Target //:test up-to-date (nothing to build)
INFO: Elapsed time: 0.083s, Critical Path: 0.00s
INFO: 0 processes.
INFO: Build completed successfully, 1 total action
最佳答案
cc_library
(例如其他规则,也包括pkg_tar
)不必具有任何来源。这也是有效的:
cc_library(
name = "empty",
srcs = [],
)
deps
(或
srcs
),其中实际内容仅适用于某些条件:
cc_binary(
name = "mybinary",
srcs = ["main.c"],
deps = select({
":platform1": [":some_plat1_only_lib"],
":platform2": [":empty"], # as defined in the above snippet
}),
)
[]
用作
:platform2
deps
了),如果您有一棵更大的树,并且您希望开发人员仅依赖
//somelib:somelib
,则可以通过
alias
使用此空库为他们提供单个标签,而不必担心所有平台特定的细节以及在以下情况下如何处理提供某些功能的问题:
# somelib/BUILD:
alias(
name = "somelib",
actual = select({
":platform1": [":some_plat1_only_lib"],
":platform2": [":empty"], # as defined in the above snippet
}),
visibility = ["//visibility:public"], # set appropriately
)
mybinary
或任何其他目标现在可以说:
cc_binary(
name = "mybinary",
srcs = ["main.c"],
deps = ["//somelib"],
)
bazel
),您通常不会(也不会很有用)自行编译头文件。您仅会使用其内容,然后才能看到编译器在尝试构建 header 是
#include
d的源时失败。那是
bazel build
失败的原因,另一个目标必须依赖
test
和
#include "test.h"
。
关于c++ - 没有src的Bazel cc_library不会自行编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60244695/
我发现以下帖子非常有帮助: How to pickle yourself? 但是,此解决方案的局限性在于,重新加载类时,它不会以其“运行时”状态返回。即它将重新加载所有变量等以及类在转储时的一般状态.
我是一名优秀的程序员,十分优秀!