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 ccdgen
python3 -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 all
Example 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
,subprocess
andsys
. - This script relies on
make
echoing the compiler commands it runs to stdout. If compiler commands are prefixed in the Makefile with@
ormake
is 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.json
by adding-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
when calling it. This only works for Unix Makefile builds. - Bear is much more advanced tool for
generating compilation databases for
clang
tooling. macOS, Linux and FreeBSD are currently supported.