Skip to content

Repository files navigation

YAE

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.

Requirements

  • 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.

Install

git clone https://github.com/Sunday111/yae
sudo ln -sf "$PWD/yae/yae" /usr/bin/yae   # optional: call it as `yae` from anywhere

Bash completion

With 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.bash

Quick start

Build 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 executable

yae 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 needed

See what a project contains:

yae list                     # this project's modules
yae git-status               # repos with uncommitted changes

Common flags

  • --project_dir=<path> or YAE_PROJECT_DIR — operate on a project without cd-ing into it. For format, the path may be any Git repository even when it has no yae_project.json; --repository_dir is a clearer alias.
  • --cloned_repositories_dir=<path> or YAE_CLONED_REPOSITORIES_DIR — where dependencies are fetched/shared.
  • --clone-progress — stream git clone progress on slow networks.

Building without YAE

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 --parallel

See Generated CMake for details.

Documentation

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.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages