Skip to content

Core Concepts

Understanding the foundational concepts of Catalyst is key to effectively managing your C++ projects.

Catalystignore

Exclude specific source files from the build based on active profiles using regex patterns. This is essential for handling platform-specific or build-type-specific code without complex directory structures.

Configuration

Define project metadata, build settings, and directory structures using intuitive YAML files. Centralize your profile management in a single CATALYST.yaml for streamlined project coordination.

Dependencies

Manage external libraries from Git, vcpkg, local paths, or system packages with a unified interface. Utilize lockfiles to ensure that all developers on a project are using identical dependency versions.

Environment Variables

A set of internal variables that Catalyst uses to manage complex recursive dependency fetching. These ensure that profile injection and cycle detection work correctly across nested project trees.

Hooks

Execute custom shell commands or internal Catalyst subcommands at various stages of the build lifecycle. Automate tasks like post-build notifications or pre-test setup directly within your profile configuration.

Preprocessor & Features

Toggle code sections and conditionally compile files using dynamic feature flags defined in your config. Catalyst automatically generates C++ macros from these features, bridging your configuration and source code.

Profiles

Create composable build configurations that can be merged to create specific target environments. This left-to-right merging strategy allows for powerful, modular settings for things like linux + debug + asan.

Workspaces

Manage multiple related packages within a single repository using a centralized WORKSPACE.yaml. Enable seamless cross-project dependency resolution and consolidated version locking for entire monorepos.