Generating compilation databases
You can generate compilation databases for consumption by tools such as clangd and clang-tidy by running the following BXL script:
buck2 bxl prelude//cxx/tools/compilation_database.bxl:generate -- --targets ...
The script will generate a compilation database for all source and header inputs
to the targets listed on the command line. The path to the database is printed
to stdout. Note that files that are referenced by multiple targets will have
multiple associated entries in the database, which may not be desirable in all
circumstances. For example, clang-tidy runs analysis for each entry sequentially
when the file being linted has several entries.
It is common to symlink the resulting data at the root of the repository:
ln -sf $(buck2 bxl prelude//cxx/tools/compilation_database.bxl:generate -- --targets ...) $(git rev-parse --show-toplevel)
Since the path to the script is rather long, consider setting up an alias in your repository:
# `comp_db.bxl`
load("@prelude//cxx/tools/compilation_database.bxl:generate", "generate")
gen = generate
ln -sf $(buck2 bxl comp_db.bxl:gen -- --targets ...) $(git rev-parse --show-toplevel)
Providing better ergonomics for BXL scripts (such as enabling something like
buck2 comp_db) is being discussed
here.