3
我有一個非常簡單的cc_library()
規則,我想轉換爲Skylark規則。作爲Skylark規則的簡單cc_library規則
的cc_library()
規則是:
cc_library(
name = 'cc_library_a',
srcs = [ 'a.c' ],
)
我面對的是concerining是打通不同的方法通過編譯標誌的challange - 爲一體,在命令行。 所以以爲我運行以下命令行:
# bazel build :a --copt -H
這將-H
標誌添加到編譯命令。這裏的問題是我怎樣才能將-H
標誌傳播到Skylark規則?
我曾嘗試以下,但它沒有工作:
def _my_rule(ctx):
_arguments = [ '-c' ]
_arguments.append(ctx.file.src.path)
_arguments += ctx.fragments.cpp.c_options
_arguments += [ '-o', ctx.outputs.out.path ]
ctx.actions.run(
outputs = [ ctx.outputs.out ],
inputs = [ ctx.file.src ],
arguments = _arguments,
executable = ctx.fragments.cpp.compiler_executable,
)
my_rule = rule(
implementation = _my_rule,
attrs = {
'src': attr.label(allow_single_file = True),
},
outputs = {
'out': '%{name}.o',
},
fragments = [ 'cpp' ],
)
的BUILD文件內容如下:
load(':rules.bzl', 'my_rule')
my_rule(
name = 'skylark_a',
src = 'a.c',
)
cc_library(
name = 'cc_library_a',
srcs = [ 'a.c' ],
)
建設雲雀規則的輸出清楚的顯示被忽略:
# bazel build skylark_a --copt -H --subcommands
INFO: Found 1 target...
>>>>> # //:skylark_a [action 'SkylarkAction skylark_a.o']
(cd /bazel/jbasila/_bazel_jbasila/4d692aace2e7e1a45eec9fac3922ea8d/execroot/__main__ && \
exec env - \
/usr/bin/gcc -c a.c -o bazel-out/local-fastbuild/bin/skylark_a.o)
INFO: From SkylarkAction skylark_a.o:
a.c: In function 'a':
a.c:3:5: warning: implicit declaration of function 'puts' [-Wimplicit-function-declaration]
puts("a");
^~~~
Target //:skylark_a up-to-date:
bazel-bin/skylark_a.o
INFO: Elapsed time: 0.578s, Critical Path: 0.05s
我錯過了什麼?
如果這應該是關於C++代碼,請編輯您的問題以提供該代碼的[mcve]。否則,只需刪除C++標記。 –