Skip to content

C++ project layout

The generated starter project has besa.toml as its authoritative project declaration and one C++ source prefix below src/:

project/
├── besa.toml
├── CMakeLists.txt               # CMake backend bootstrap
├── cmake/
│   └── besa/
├── properdocs.yml
├── docs/                        # ProperDocs source
│   ├── CMakeLists.txt
│   ├── index.md
│   └── reference/
│       └── index.md
├── api-docs/                    # Doxygen/Breathe/Sphinx API source
│   ├── conf.py
│   ├── Doxyfile.in
│   ├── index.rst
│   ├── _static/
│   └── _templates/
├── src/
│   └── cpp/
│       ├── bin/
│       ├── include/
│       │   └── <project>/
│       └── lib/
│           └── <project>/
├── test/
├── project/
└── showcases/

The C++ source prefix is registered directly in besa.toml; there is no intermediate src/CMakeLists.txt whose purpose is only to repeat that declaration. BESA owns prefix discovery and creates the project library/executables from the conventional include/, lib/, bin/, and optional mod/ contents.

Likewise, project/ and showcases/ entries are ordinary conditional directory registrations in the model. Their project-* and showcase-* names are feature metadata/conventions, not separate build systems.

Workspace layout

Generated state belongs to a workspace rather than to the project declaration:

<workspace>/
├── build/                       # backend build state/artifacts
├── codegen/                     # generated prefixes
│   └── meta/
│       └── include/<project>/version.hpp
├── docs/                        # generated documentation
└── configure_cache/             # normalized model and analysis caches

The CMake backend uses the parent of PROJECT_BINARY_DIR as the default workspace; callers may set BESA_WORKSPACE explicitly.

User-documentation layout

docs/ is the ProperDocs source tree and owns the canonical information architecture. api-docs/ is separate: Doxygen generates XML, Breathe imports it, Exhale creates entity pages, and sphinx-multiversion rebuilds the API renderer for selected Git refs. Generated documentation is written below <workspace>/docs/, and the assembled site mounts API versions below reference/api/<version>/.

API discovery uses the profiles declared in besa.toml, merges their Doxygen models, annotates every entity with profile availability, and generates an API configuration page describing the feature and profile mappings used for the reference. Program listings are restored from the real source files so whitespace, comments, preprocessor branches, portability macros, and physical line numbers remain faithful to the checkout being documented.