This is an example of how to use the rules in a nested subpackage that split the project in multiple libraries. Move to the parent directory and run the following command:
bazel build //nested:doxygen
The lib_a library is in a subpackage, determined by the presence of a BUILD.bazel file. It must export a filegroup target to make the sources available to the doxygen rule.
# BUILD.bazel file in the lib_a directory filegroup( name = "sources", srcs = glob([ "*.h", "*.cpp", ]), visibility = ["//visibility:public"], )
# BUILD.bazel file in this directory doxygen( name = "doxygen", srcs = glob([ "*.h", "*.cpp", ]) + ["//nested/lib_a:sources"], configurations = ["INPUT = nested nested/lib_a"] project_name = "nested", )
The lib_b library does not have a BUILD.bazel file, so it is not a subpackage. Its files are available to the doxygen rule from its parent directory.
# BUILD.bazel file in this directory doxygen( name = "doxygen", srcs = glob([ "*.h", "*.cpp", "lib_b/*.h", "lib_b/*.cpp", ]), configurations = ["INPUT = nested nested/lib_b"] project_name = "nested", )
It is possible to fuse both approaches together, with the following BUILD.bazel file:
doxygen( name = "doxygen", srcs = glob([ "*.h", "*.cpp", "lib_b/*.h", "lib_b/*.cpp", ]) + ["//nested/lib_a:sources"], configurations = [ "INPUT = nested nested/lib_a nested/lib_b", ], project_brief = "Example project for doxygen", project_name = "nested", )
Having multiple doxygen rules in the same folder is supported, but requires some extra configuration. By default, all rules would create a Doxyfile in the same location, causing a conflict. The same applies to the output html folder.
To avoid this, remember to specify different doxyfile_prefix and outs for each rule:
doxygen( name = "doxygen_a", srcs = ["//nested/lib_a:sources"], outs = [ "a/html", "a/tags", ], doxyfile_prefix = "a", project_brief = "Example project for doxygen, library A", project_name = "nested", generate_tagfile = "$(OUTDIR)/tags/tagfile.xml", ) doxygen( name = "doxygen_b", srcs = glob([ "lib_b/*.h", "lib_b/*.cpp", ]), outs = [ "b/html", "b/tags", ], doxyfile_prefix = "b", project_brief = "Example project for doxygen, library B", project_name = "nested", generate_tagfile = "$(OUTDIR)/tags/tagfile.xml", )