YAE clones a C++ project's dependencies and generates its CMakeLists.txt files. The generated CMake is committed and
builds with plain cmake — YAE is not required to configure or build. On top of that, YAE adds convenience commands
(build, run, profile, list, git-status, format, tidy, …) so day-to-day work is a single command.
The Python implementation lives under src/yae; the root yae launcher runs it through uv.
- uv on your
PATH(runs YAE in a local.venv; nothing is installed globally). - git, CMake 3.29 or newer, Ninja (the default generator), and a C++ toolchain.
- Python 3.12 or newer, if the project stages content — the build calls a script to do it. Needed to build the project even without YAE; see Generated CMake.
git clone https://github.com/Sunday111/yae
sudo ln -sf "$PWD/yae/yae" /usr/bin/yae # optional: call it as `yae` from anywhereWith bash-completion installed, link the completion script from your YAE checkout:
completion_dir="${XDG_DATA_HOME:-$HOME/.local/share}/bash-completion/completions"
mkdir -p "$completion_dir"
ln -s "$PWD/completions/yae.bash" "$completion_dir/yae"Bash loads it automatically when completing yae. It completes commands, options,
directory arguments, and fixed option choices. Build and executable target names
are not completed. To reload it in a shell that has already loaded the script,
run source "$completion_dir/yae".
The script is generated from the argument parser. After changing command definitions, regenerate it from the checkout root with:
uv run python -m yae.completion > completions/yae.bashBuild and run a project you already have (a directory containing yae_project.json):
cd path/to/project
yae build # fetch dependencies, generate CMake, configure, and build
yae run # (re)build, then run the default executableyae build runs the whole generate → configure → build chain for you.
Clone a project with YAE and run it:
export YAE_CLONED_REPOSITORIES_DIR="$HOME/yae_repositories"
yae clone https://github.com/Sunday111/verlet_cuda
yae run verlet_cuda # finds the checkout by target name — no cd neededSee what a project contains:
yae list # this project's modules
yae git-status # repos with uncommitted changes--project_dir=<path>orYAE_PROJECT_DIR— operate on a project withoutcd-ing into it. Forformat, the path may be any Git repository even when it has noyae_project.json;--repository_diris a clearer alias.--cloned_repositories_dir=<path>orYAE_CLONED_REPOSITORIES_DIR— where dependencies are fetched/shared.--clone-progress— streamgit cloneprogress on slow networks.
Because the CMake files are committed, anyone can build without the tool:
cmake -S . -B build -DYAE_CLONED_REPOSITORIES_DIR=/path/to/repositories
cmake --build build --parallelSee Generated CMake for details.
| Topic | What's in it |
|---|---|
| Getting started | Install, first build, cloning a project. |
| Commands | Full reference for every command and its flags. |
| Project model | yae_project.json, *.package.json, *.module.json. |
| Repositories & running from anywhere | Dependency fetching, path resolution, YAE_PROJECT_DIR, discovery. |
| Generated CMake | The committed CMake, building without YAE, the support package. |
| Configuration | local-config.json, compiler/generator settings, pinning the support package. |
| Self test | What yae self-test checks. |