A Python script to generate a compile_commands.json database
by capturing the output of make. This script was originally created to provide
compilation databases for make based C/C++ projects in Visual Studio Code.
pip install ccdgenpython3 -m ccdgen --extensions <arguments...> -- <your build command>
Arguments:
| Option | Default | Description |
|---|---|---|
-h, --help |
Show help message and exit | |
-c, --compiler |
(auto detect) | Specify compiler |
-d, --dir |
./ | Working directory to run make from |
-e, --extensions |
Extension(s) for source files | |
-o, --output |
./compile_commands.json | Output file |
For example, to run make all as the build command for a C project:
python3 -m ccdgen --extensions .c -- make allExample Visual Studio Code task:
{
"version": "2.0.0",
"tasks": [
{
"label": "ccdgen",
"type": "shell",
"command": "python",
"osx": {
"command": "python3"
},
"args": [
"-m", "ccdgen",
"--extensions", ".c",
"--", "make", "all"
]
}
]
}- The script relies on the Python standard library modules
argparse,json,os,subprocessandsys. - This script relies on
makeechoing the compiler commands it runs to stdout. If compiler commands are prefixed in the Makefile with@ormakeis run in silent mode, the output cannot be captured. - The build must succeed to generate a full compilation database, though warnings are not a problem.
- Currently only tested with Python 3.10 on macOS Ventura and Windows 10.
- CMake (since version 2.8.5) can be used as is to generate
compile_commands.jsonby adding-DCMAKE_EXPORT_COMPILE_COMMANDS=ONwhen calling it. This only works for Unix Makefile builds. - Bear is much more advanced tool for
generating compilation databases for
clangtooling. macOS, Linux and FreeBSD are currently supported.