Someone asked me today about how to use a generated header as a C++ dependency in Bazel, so I figured I’d write up a quick example.
Create a BUILD file with a genrule that generates the header and a cc_library that wraps it, say, foo/BUILD:
genrule( name = "header-gen", outs = ["my-header.h"], # This command would probably actually call whatever tool was generat cmd = "echo 'int x();' > $@", ) cc_library( name = "lib", hdrs = ["my-header.h"], srcs = ["lib.cc"], visibility = ["//visibility:public"] )
Now you can depend on //foo:lib
as you would a “normal” cc_library:
cc_binary( name = "bin", srcs = ["bin.cc"], deps = ["//foo:lib"], )
And bin.cc would look like:
#include "foo/my-header.h" // ... int main() { x(); // Uses x defined in my-header.h. }