Vix Modules β
The vix modules command enables a strict, app-first module system for any CMake project.
The design is inspired by Go modules philosophy:
- Explicit dependencies
- Strict public/private boundaries
- No accidental header leakage
- Enforced architectural discipline
Command Overview β
bash
vix modules <subcommand> [options]Subcommands β
text
init Initialize modules mode
add <name> Create a module skeleton
check Validate module safety rulesGlobal Options β
text
-d, --dir <path> Project root (default: current)
--project <name> Override project name
--no-patch Do not patch root CMakeLists.txt
--patch Patch root CMakeLists.txt (default)
--no-link Do not auto-link module into main target
--link Auto-link module into main target (default)
-h, --help Show help1. Initialize Modules Mode β
bash
vix modules initThis creates:
text
modules/
cmake/vix_modules.cmakeIt can optionally patch your root CMakeLists.txt.
Example root patch:
cmake
include(cmake/vix_modules.cmake)
vix_modules_enable()2. Add a Module β
bash
vix modules add authCreates:
text
modules/auth/
include/auth/
src/
CMakeLists.txtPublic header example:
cpp
// modules/auth/include/auth/api.hpp
#pragma once
namespace auth {
void login();
}Private implementation:
cpp
// modules/auth/src/api.cpp
#include <auth/api.hpp>
namespace auth {
void login() {}
}Generated CMake target:
cmake
add_library(<project>_auth)
add_library(<project>::auth ALIAS <project>_auth)
target_include_directories(<project>_auth
PUBLIC modules/auth/include
PRIVATE modules/auth/src
)3. Explicit Cross-Module Dependency β
If products depends on auth, you must declare it explicitly:
cmake
target_link_libraries(<project>_products
PUBLIC <project>::auth
)No implicit dependency resolution is allowed.
4. Module Structure Contract β
Each module must follow:
text
modules/<m>/include/<m>/... public headers
modules/<m>/src/... private implementationPublic include style:
cpp
#include <auth/api.hpp>Never:
cpp
#include "modules/auth/src/internal.hpp"5. Validate Module Safety β
bash
vix modules checkThis validates:
- Public headers do not include private headers
- Cross-module usage is explicitly linked
- Include structure follows contract
- No accidental boundary violations
Design Philosophy β
Vix modules enforce:
- Architectural clarity
- Dependency correctness
- Long-term maintainability
- Build-time safety
Everything must be explicit. Nothing is automatic. No hidden coupling.
Minimal Workflow Example β
bash
vix modules init
vix modules add auth
vix modules add products
vix modules checkThis results in a clean, explicit, Go-like module architecture for C++.