Tool for generating Clang's JSON Compilation Database file for GNU
make
-based build systems.
It's aimed mainly at non-cmake (cmake already generates compilation database)
large codebases. Inspired by projects like YCM-Generator and Bear,
but it's supposed to be faster (mainly with large projects), since it doesn't need a
clean build (as the current available tools do) to generate the compilation database
file, to achieve this it uses the make options such as -Bnk
to extract the compile
commands. Also, it's more cross-compiling friendly than YCM-generator's fake-toolchanin
approach.
# pip install compiledb
- Supports Python 2.x and 3.x (for now, tested only with 2.7 and 3.6 versions)
- For bash completion support, add the content of
sh-completion/compiledb.bash
file to your.bashrc
file, for example. - ZSH completion coming soon :)
compiledb
provides a make
python wrapper script which, besides to execute the make
build command, updates the JSON compilation database file corresponding to that build
command, resulting in a command-line interface similar to Bear.
To generate compile_commands.json
file using compiledb-generator's "make wrapper" script,
executing Makefile target all
:
$ compiledb make
compiledb
forwards all the options/arguments passed after make
subcommand to GNU Make
command, so one can, for example, generate compile_commands.json
using core/main.mk
as main makefile (-f
flag), starting the build from build
directory (-C
flag):
$ compiledb make -f core/main.mk -C build
Even though, by default, compiledb make
generates the compilation database and runs the
actual build command requested (acting as a make wrapper), the build step can be skipped using
the -n
or --no-build
options.
$ compiledb -n make
Also, compiledb
base command can be used to parse compile commands from an arbitrary text
file (or stdin), assuming it has a build log (ideally generated using make -Bnwk
command),
and generates the JSON Compilation database.
For example, to generate the compilation database from build-log.txt
file, use the following
command.
$ compiledb --parse build-log.txt
Or even, to pipe make's output and print the compilation database to the standard output:
$ make -Bnwk | compiledb -o-
I've implemented it basically because I needed to index some AOSP's modules for navigating
and studying purposes (after having no satisfatory results with current tools such as
YCM-Generator and Bear). So I've reworked YCM-Generator, which resulted in
compiledb-gen-parser
and used successfully to generate compilation database for some AOSP
modules in ~1min running in a Docker container and then I've been able to use some
great tools such as:
Notice:
- Windows: tested on Windows 10 with cmd, wsl(Ubuntu), mingw32
- Linux: tested only on Arch Linux so far
Patches are always welcome :)
GNU GPLv3