Skip to main content

The missing CMake project initializer

Project description

cmake-init

🚀 Generate modern CMake projects with best practices built-in

Powered by UV - the fast Python package manager.


Quick Start

# 1. Install UV
curl -LsSf https://astral.sh/uv/install.sh | sh

# 2. Clone & Setup
git clone https://github.com/Guo-astro/cmake-start.git
cd cmake-start
./tasks.sh setup

# 3. Create a project
uv run cmake-init my-project

# 4. Build it
cd my-project
cmake --preset=dev
cmake --build --preset=dev

Usage

# C++ executable (default)
uv run cmake-init my-app

# C++ library
uv run cmake-init -s my-lib

# C++ header-only library
uv run cmake-init -h my-headers

# C project
uv run cmake-init --c my-c-app

# C++20 standard
uv run cmake-init --std 20 my-modern-app

# With Conan/vcpkg
uv run cmake-init -p conan my-app

Important: Project names must be lowercase (e.g., my-project, not MyProject)


Installing Code Quality Tools (Optional)

These tools are auto-detected - your project will build fine without them, but they provide extra code checking:

clang-tidy

# macOS
brew install llvm

# Ubuntu/Debian
sudo apt install clang-tidy

# Fedora
sudo dnf install clang-tools-extra

# NixOS
nix-env -iA nixpkgs.clang-tools

# Windows
choco install llvm

cppcheck

# macOS
brew install cppcheck

# Ubuntu/Debian
sudo apt install cppcheck

# Fedora
sudo dnf install cppcheck

# NixOS
nix-env -iA nixpkgs.cppcheck

# Windows
choco install cppcheck

When you run cmake --preset=dev, you'll see:

-- Found clang-tidy: /path/to/clang-tidy
-- Found cppcheck: /path/to/cppcheck
-- Code quality tools status:
--   clang-tidy: ON
--   cppcheck:   ON

If tools aren't found, they're automatically disabled with installation instructions.


Development

Project Structure

cmake-start/
├── cmake-init/              ← Edit these files
│   ├── cmake_init.py       
│   ├── template.py         
│   └── templates/          
│
├── src/cmake_init_lib/     ← Auto-generated (don't edit)
│   ├── cmake_init.py       
│   ├── template.py         
│   └── cmake-init.zip      
│
└── build.py                ← Builds everything

Making Changes

# 1. Edit source files
vim cmake-init/cmake_init.py
vim cmake-init/templates/common/cmake/code-quality.cmake

# 2. Rebuild (copies files + creates template ZIP)
python build.py

# 3. Test
uv run cmake-init test-project

Single source of truth: Always edit files in cmake-init/, then run python build.py


Common Issues

"ModuleNotFoundError"

./fix-editable.sh

"Changes not working"

python build.py  # Run after editing cmake-init/

"Invalid project name"

# Bad:  uv run cmake-init MyProject
# Good: uv run cmake-init my-project

NixOS build errors

export CXX=clang++
cmake --preset=dev

Commands Reference

Command Description
uv run cmake-init my-app Create C++ executable
uv run cmake-init -s my-lib Create C++ library
uv run cmake-init -h my-headers Create header-only library
uv run cmake-init --c my-c-app Create C project
uv run cmake-init --std 20 my-app Use C++20
uv run cmake-init -p conan my-app Use Conan package manager
uv run cmake-init --version Show version
python build.py Build after editing templates
python release.py patch Release new version to PyPI
./tasks.sh setup Initial setup
./fix-editable.sh Fix import errors

Releasing to PyPI

One command release:

# Option 1: Automatic (commits everything first)
./quick-release.sh patch  # 1.0.1 → 1.0.2

# Option 2: Manual (requires clean git)
python release.py patch   # 1.0.1 → 1.0.2

The script automates:

  • ✅ Version bump in pyproject.toml
  • ✅ Template archive build (build.py)
  • ✅ Wheel + source distribution build
  • ✅ Git commit & tag
  • ✅ PyPI upload
  • ✅ GitHub push

First time setup:

# Get PyPI token: https://pypi.org/manage/account/token/
export PYPI_TOKEN='pypi-...'
# OR configure ~/.pypirc (see .pypirc.example)

See RELEASE.md for detailed documentation.


What Makes This Different?

Auto-detects clang-tidy and cppcheck - no build failures
Latest vcpkg - automatically fetches current baseline hash
Fast - powered by UV (10-100x faster than pip)
Modern - CMake presets, FetchContent-ready
Developer-friendly - helpful error messages
Cross-platform - macOS, Linux, Windows, NixOS
Single source - edit cmake-init/, run build.py


Links


Made with ❤️ for developers who hate boilerplate

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cmake_start-1.0.2.tar.gz (94.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cmake_start-1.0.2-py3-none-any.whl (58.0 kB view details)

Uploaded Python 3

File details

Details for the file cmake_start-1.0.2.tar.gz.

File metadata

  • Download URL: cmake_start-1.0.2.tar.gz
  • Upload date:
  • Size: 94.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.14

File hashes

Hashes for cmake_start-1.0.2.tar.gz
Algorithm Hash digest
SHA256 88b9938eae89049aeca3cbd2ddce5cc266dcfaf5e0a29ee9020e87a5ec43e8c4
MD5 20dc5c3afc74ea95c424b261e8d19bff
BLAKE2b-256 3c48ec940751dbe755e3b9f27130574f8587dde7497bb94d12739adffc728373

See more details on using hashes here.

File details

Details for the file cmake_start-1.0.2-py3-none-any.whl.

File metadata

File hashes

Hashes for cmake_start-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ce73d6c5d6f124c9d9441e7429f4779db59781b98ea8f93c820c86be826a9525
MD5 d821fa3ea95e02ca30d2ea8bc9ac7338
BLAKE2b-256 f8d77e8a83e75ff210033fd7ac60cb76bca4997a946747253fac919f8af83aaf

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page