Skip to main content

Advanced Topics

Advanced Topics

Precompiled Headers

[pch]
enabled = true
header = "include/pch.h"
source = "src/pch.cpp" # Optional
exclude_sources = ["src/no_pch.cpp"]

Package Generation

# Create a package (defaults to zip/tar.gz)
cforge package

# Specify package type
cforge package --type deb # Linux Debian package
cforge package --type rpm # Linux RPM package
cforge package --type zip # Zip archive

Installing Projects

# Install to default location
cforge install

# Install to specific directory
cforge install --prefix /usr/local

Hot Reload

Hot reload recompiles changed translation units and reloads them into the running process without a full restart. It is useful for tightening inner feedback loops during development of applications with long startup times (e.g., game engines, GUI tools, simulations).

Configuration

Add a [hot_reload] section to cforge.toml:

[hot_reload]
enabled = true
watch_dirs = ["src", "include"] # Directories to watch for changes
exclude = ["src/generated"] # Paths to ignore

Usage

# Start the hot reload session
cforge hot

# Alias
cforge hot-reload

CForge watches the configured directories, recompiles modified .cpp files on save, and hot-swaps the resulting shared object into the live process.

Runtime API Example

#include <cforge/hot_reload.h>

// Called by cforge after each successful hot-swap
extern "C" void on_hot_reload() {
// Re-register systems, refresh caches, etc.
MyApp::instance().refresh();
}

Note: Hot reload requires the project to be built as a shared library (binary_type = "shared"). Static builds are not supported.

CMake Migration

cforge migrate (alias: cforge import) converts an existing CMakeLists.txt into a cforge.toml so you can adopt cforge incrementally.

Usage

# Dry-run to preview the generated config
cforge migrate --dry-run

# Run migration with a backup of the original file
cforge migrate --backup

# Migrate a subdirectory
cforge migrate path/to/project

The command writes cforge.toml next to the detected CMakeLists.txt. Your original CMakeLists.txt is preserved; cforge generates its own alongside it.

Limitations

LimitationNotes
Generator expressionsComplex $<...> expressions are not translated
Custom CMake modulesinclude() calls to third-party .cmake modules are noted but not inlined
Multi-target projectsOnly the first add_executable / add_library target is migrated; additional targets require manual editing
Conditional logicif()/else() blocks are evaluated with defaults; platform-specific branches may need review

After migrating, run cforge build and compare the output with your previous CMake build to verify correctness.

CI Integration

CForge works out of the box in GitHub Actions and other CI environments.

GitHub Actions Example

name: CI

on: [push, pull_request]

jobs:
build:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Install cforge
run: curl -fsSL https://get.cforge.dev | sh

- name: Check dependency conflicts
run: cforge deps tree --check

- name: Build
run: cforge build --config Release

- name: Test
run: cforge test

- name: Package
run: cforge package --type zip

Key CI Flags

FlagPurpose
cforge init -yNon-interactive project scaffolding in scripts
cforge deps tree --checkFail the build on version conflicts
cforge build --config ReleaseAlways build Release in CI
cforge testRun the full CTest suite