Tool for generating Clang's JSON Compilation Database files for make-based build systems.
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 faster (mainly with large projects), since in most cases it doesn't need a clean build (as the mentioned tools do) to generate the compilation database file, to achieve this it uses the make options such as
--keep-goingto extract the compile commands. Also, it's more cross-compiling friendly than YCM-generator's fake-toolchanin approach.
# pip install compiledb
sh-completion/compiledb.bashfile to your
.bashrcfile, for example.
makepython wrapper script which, besides to execute the make build command, updates the JSON compilation database file corresponding to that build, resulting in a command-line interface similar to Bear.
compile_commands.jsonfile using compiledb's "make wrapper" script, executing Makefile target
bash $ compiledb make
compiledbforwards all the options/arguments passed after
makesubcommand to GNU Make, so one can, for example, generate
core/main.mkas main makefile (
-fflag), starting the build from
bash $ compiledb make -f core/main.mk -C build
compiledb makegenerates the compilation database and runs the actual build command requested (acting as a make wrapper), the build step can be skipped using the
bash $ compiledb -n make
compiledbbase command has been designed so that it can be used to parse compile commands from arbitrary text files (or stdin), assuming it has a build log (ideally generated using
make -Bnwkcommand), and generates the corresponding JSON Compilation database.
For example, to generate the compilation database from
build-log.txtfile, use the following command.
bash $ compiledb --parse build-log.txt
or its equivalent:
bash $ compiledb < build-log.txt
Or even, to pipe make's output and print the compilation database to the standard output:
bash $ make -Bnwk | compiledb -o-
compiledbgenerates a JSON compilation database in the "arguments" list format. The "command" string format is also supported through the use of the
bash $ compiledb --command-style make
I've implemented this tool because I needed to index some AOSP's modules for navigating and studying purposes (after having no satisfatory results with current tools available by the time such as YCM-Generator and Bear). So I've reworked YCM-Generator, which resulted in the initial version of compiledb/parser.py and used successfully to generate
compile_commands.jsonfor some AOSP modules in ~1min running in a Docker container and then could use it with some great tools, such as:
Notice: - Windows: tested on Windows 10 with cmd, wsl(Ubuntu), mingw32 - Linux: tested only on Arch Linux and Ubuntu 18 so far - Mac: tested on macOS 10.13 and 10.14
Patches are always welcome :)