I love CMake. Unfortunately, it only works with "true" IDEs like Visual Studio, fully ignoring the existence of fancy text editors and not-quite-abandoning other IDEs. RetroMake is here to change that!
RetroMake has the same command-line interface as CMake except for the -G
argument. RetroMake accepts not one entity, but many, and these many entities occupy multiple slots. The standard slots include:
- Compiler -- compiler and linker (essential)
- Build system -- build automation system (essential)
- Text editor -- basic text editor
- IntelliSense -- syntax highlighting, autocomplete and friends for the text editor
- Debugger -- debugger for the test editor
All slots need to be occupied for a full IDE-like experience. RetroMake's
-G
parameter is also case-invariant.
RetroMake is aware has following modules built-in:
- GCC ✅
- Occupied slots: compiler
- Dependencies: none
- Clang (alias: llvm) ✅
- Occupied slots: compiler
- Dependencies: none
- Make (alias: Makefile, Makefiles, Unix makefile, Unix Makefiles) ✅
- Occupied slots: build system
- Dependencies: none
- Ninja ❌
- Occupied slots: build system
- Dependencies: none
- VS Code (alias: VSCode, Code, VS Code, Visual Studio Code) ✅
- Occupied slots: text editor
- Dependencies: none
- VS Codium (alias: VSCodium, Codium, VSCode OSS, VS Code OSS) ✅
- Occupied slots: text editor
- Dependencies: none
- Clangd ❌
- Occupied slots: intellisense
- Dependencies: VS Code or VS Codium
- Native Debug (alias: WebFreak, Web Freak) ✅
- Occupied slots: debugger
- Dependencies: VS Code or VS Codium
- Visual Studio (alias: VS) ❌
- Occupied slots: compiler, build system, text editor, intellisense, debugger
- Dependencies: none
- Code::Blocks (alias: CodeBlocks) ✅
- Occupied slots: build system, text editor, intellisense, debugger
- Dependencies: none
When creating a project, you need to specify all desired functionality in the
-G
parameter, comma-separated. For example:
retromake .. -G 'GCC, Make, Codium, Native Debug'
RetroMake is built with CMake and uses CMake to parse CMakeLists.txt
. Right now RetroMake is a mere wrapper around CMake, that hoverer will change with new modules. RetroMake also depends on RapidJSON and RapidXML.
RetroMake determines the list of requested modules by going through following priority list:
-G
argumentRETROMAKE_REQUESTED_MODULES
environmental variableRETROMAKE_REQUESTED_MODULES
entry in~/.retromake
RETROMAKE_REQUESTED_MODULES
entry in/etc/retromake
You want to implement your own module? No problem! RetroMake is highly modularized, the new module can be implemented in a fork or added into existing RetroMake installation as a file. In the latter case, your module needs to end with .so
and to expose a factory function with the following signature:
extern "C" rm::Module *create_module(const std::string &requested_module);
It also needs to be said that current architecture is not scalable and flexible enough. I don't plan on providing any backwards compatibility for modules for now.