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

# Quick release (patch/minor/major)
python release.py patch  # 0.42.0 → 0.42.1

# See RELEASE.md for full documentation

The script handles: version bump, build, git tag, PyPI publish, and GitHub push.


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.0.tar.gz (94.6 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.0-py3-none-any.whl (57.8 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for cmake_start-1.0.0.tar.gz
Algorithm Hash digest
SHA256 8f6dd66132fd00633150f16bdeb8ebba9dbd7f92550f67551710d765de7b2824
MD5 42a0d9de5b6ab77e659395ac89f0d86c
BLAKE2b-256 a1f7e098e6776a513985bcbad17fd08d97bbacd10417ab131281795fa440448d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cmake_start-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 754f7f6f5cc973ce00f75075dc4088bc3d26f9870dc95d28ef544536843c758e
MD5 5e0b5c486df589c9e34c99f34b138fb8
BLAKE2b-256 062b10760b3f2c0f6e221a0be684ab3c9d4137957127be2528dd52a737f09e2e

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