Fed*_*Fed 2 c++ linker compilation bazel
我想知道是否有一种方法可以在单独的步骤中使用 Bazel 执行编译和链接操作。如果我执行命令
bazel build -s //main:hello-world
Run Code Online (Sandbox Code Playgroud)
所有 bazel 子命令都会被打印。我知道可以从命令行执行这些子命令,但我想知道如何使用 Bazel 仅执行编译操作,并且仅在单独的步骤中执行链接操作。预先感谢您的任何帮助!
不确定您到底在追求什么,但本质上,您可以编写一个自定义规则,将cc_*
目标作为源传递到其中,并尝试将其操作分开,仅获取您感兴趣的输出,例如:
def _impl(ctx):
outs = []
for src in ctx.attr.srcs:
if hasattr(src, "actions"):
for action in src.actions:
if action.mnemonic == "CppCompile":
outs.append(action.outputs)
return DefaultInfo(files = depset(transitive = outs))
just_compile = rule(
_impl,
attrs = {
"srcs": attr.label_list(mandatory = True),
},
)
Run Code Online (Sandbox Code Playgroud)
如果我有以下BUILD
文件:
load("//:just_compile.bzl", "just_compile")
just_compile(
name = "compile_hello",
srcs = [":hello"],
)
cc_binary(
name = "hello",
srcs = ["hello.cpp"],
)
Run Code Online (Sandbox Code Playgroud)
然后你运行(你可以添加-s
到观看):
bazel build compile_hello
Run Code Online (Sandbox Code Playgroud)
您将只得到执行的编译步骤(因为我们实际上没有请求hello
目标,并且没有其他需要按照请求链接到树中的内容)及其产生的结果:
bazel-bin/
bazel-bin/_objs
bazel-bin/_objs/hello
bazel-bin/_objs/hello/hello.pic.d
bazel-bin/_objs/hello/hello.pic.o
Run Code Online (Sandbox Code Playgroud)
链接助记符是CppLink
.
所以,是的,你可以将自己投入到特定的行动中。为了便于辩论,这至少是我知道的一种选择。但同样,我并不完全确定你到底在追求什么,你想解决什么问题。
归档时间: |
|
查看次数: |
1314 次 |
最近记录: |