I’ve been working for quite some time on a daemon mode for CMake in order to make it easier to build advanced tooling for CMake. I made a video about this today:
The general idea is that CMake is started as a long-running process, and can then be communicated with via a JSON protocol.
So, for example, a client sends a request like
{ "type": "code_completion_at", "line": 50, "path": "/home/stephen/dev/src/cmake-browser/CMakeLists.txt", "column": 7 }
and the daemon responds with
{ "completion":{ "commands":[ "target_compile_definitions", "target_compile_features", "target_compile_options", "target_include_directories", "target_link_libraries", "target_sources" ], "matcher":"target_" } }
Many more features are implemented such as semantic annotation, variable introspection, contextual help etc, all without the client having to implement it themselves.
Aside from the daemon, I implemented a Qt client making use of all of the features, and a Kate plugin to use the debugging features in that editor. This is the subject of my talk at FOSDEM, which I previewed in Berlin last week.
Come to my talk there to learn more!