forked from microsoft/vscode-cpptools
-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Yiftah Waisman edited this page Oct 21, 2024
·
15 revisions
- CMake pull request:
compdb: mergedCompileCommands for CMake subprojects - cpptools issue:
Support multiple compile commands files per project
- must use
CMakeas the build system - must use VSCode's
CMake Toolsto build your project (runningcmake ..,makeon your project will not causeCMake Toolsto merge the generated db files)
- define the following entries in
.vscode/settings.json:
-
"C_Cpp.default.compileCommands"is not changed (to a list) for backwards compatibility, specifying multiple sources will not inform where the destination file should be saved. -
"C_Cpp.default.compileCommands"can also be ignored and overridden toC_cpp.mergeCompileCommands.destination(not mandatory)
"configurations": [
{
// already implemented
"name": "My Custom Config",
"compileCommands": "${workspaceFolder}/build/merged_compile_commands.json",
// new
"mergeCompileCommands": [
"${workspaceFolder}/build/proj1/compile_commands.json",
"${workspaceFolder}/build/proj2/compile_commands.json"
]
}
],Pros/Cons:
- todo
- File watchers are constructed for each entry in
"C_cpp.mergeCompileCommands.sources" - When a file watcher event is triggered on any of the sources, we try to collect them all and merge to a single file, with the same merging strategy used in
CMake Tools.
- paths defined in
c_cpp_properties.jsonare specific for a configuration, each maybe having onecompileCommandspath. -
C_Cpp.default.compileCommandsfrom.vscode/settings.jsonis only used if the selected configuration didn't define acompileCommands. - defining
compileCommandsin configurations will mask the single merged file as some configuration is always selected.
- the
CMake Toolsextension (probably) supports glob patterns without consuming heavy CPU resources as it only tries to search forcompile_commands.jsonfiles when a a target build is finished succesfully. (one time per build) - the
C/C++extension doesn't know when a build is started (or finished), so it actively observes for changes in the user-definedcompileCommandsfiles.- continuously stating multiple directories and subdirectories might create a non-negligible and persistent CPU load.
- continuously stating build directories will create many false positive events during compilation processes that take more than a few seconds.
- todo
- todo