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.
Installation
For normal users, install directly from PyPI using uv:
# 1. Install UV (if you don't have it)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 2. Install cmake-start from PyPI
uv tool install cmake-start
# 3. Create a project
cmake-init my-project
# 4. Build it
cd my-project
cmake --preset=dev
cmake --build --preset=dev
๐ฆ PyPI Package: https://pypi.org/project/cmake-start/
Quick Start (Development)
For contributors who want to develop cmake-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
After installing from PyPI:
# C++ executable (default)
cmake-init my-app
# C++ library
cmake-init -s my-lib
# C++ header-only library
cmake-init -h my-headers
# C project
cmake-init --c my-c-app
# C++20 standard
cmake-init --std 20 my-modern-app
# With Conan/vcpkg
cmake-init -p conan my-app
For development (running from source): prefix commands with uv run, e.g., uv run cmake-init my-app
Important: Project names must be lowercase (e.g., my-project, not MyProject)
Code Quality Tools & OpenMP (Strongly Recommended)
clang-tidy, cppcheck, and OpenMP are enabled by default for better code quality and performance.
When you run cmake --preset=dev, the build system will:
- Check if clang-tidy, cppcheck, and OpenMP are installed
- Show detailed installation instructions if missing
- Continue building (tools disabled if not found)
Example Output (All Tools Found)
โ
Found clang-tidy: /opt/homebrew/bin/clang-tidy
โ
Found cppcheck: /opt/homebrew/bin/cppcheck
โณ OpenMP check deferred (waiting for project() command)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ Code Quality & Performance Tools Status:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
clang-tidy: ENABLED
/opt/homebrew/bin/clang-tidy
โ
cppcheck: ENABLED
/opt/homebrew/bin/cppcheck
โ OpenMP: ENABLED but NOT FOUND
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
Found OpenMP (post-project check):
C++ version: 4.5
๐ To use OpenMP in your code:
1. Add to CMakeLists.txt:
target_link_libraries(your_target PRIVATE OpenMP::OpenMP_CXX)
2. In your C/C++ code:
#include <omp.h>
#pragma omp parallel for
๐ All code quality and performance tools are active!
Example Output (Tools Missing)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๏ธ clang-tidy not found - installation instructions:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ฆ macOS (Homebrew):
brew install llvm
โ๏ธ Nix (declarative - recommended):
Add to your configuration.nix or home.nix:
home.packages = [ pkgs.clang-tools ];
โ๏ธ Nix (imperative - quick test):
nix-env -iA nixpkgs.clang-tools
# OR with nix profile:
nix profile install nixpkgs#clang-tools
๐ก To disable this check:
cmake --preset=dev -DENABLE_clang-tidy=OFF
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Installation Guide
๐ฆ macOS (Homebrew)
# Code quality tools
brew install llvm cppcheck
# OpenMP for parallel programming
brew install libomp
# Add to PATH if needed:
export PATH="/opt/homebrew/opt/llvm/bin:$PATH"
โ๏ธ Nix (Declarative - Recommended)
Add to your configuration.nix, home.nix, or flake.nix:
# For system-wide (configuration.nix)
environment.systemPackages = with pkgs; [
clang-tools # clang-tidy
cppcheck
llvmPackages.openmp # OpenMP
# OR use gcc which includes OpenMP
gcc
];
# For home-manager (home.nix)
home.packages = with pkgs; [
clang-tools
cppcheck
llvmPackages.openmp
];
# For flake.nix devShell (recommended for project isolation)
devShells.default = pkgs.mkShell {
buildInputs = with pkgs; [
cmake
clang-tools
cppcheck
llvmPackages.openmp
];
};
Then rebuild:
# NixOS
sudo nixos-rebuild switch
# home-manager
home-manager switch
# flake devShell
nix develop
โ๏ธ Nix (Imperative - Quick Test)
# Traditional nix-env
nix-env -iA nixpkgs.clang-tools nixpkgs.cppcheck nixpkgs.llvmPackages.openmp
# Modern nix profile
nix profile install nixpkgs#clang-tools nixpkgs#cppcheck nixpkgs#llvmPackages.openmp
# Temporary shell (doesn't persist - great for testing)
nix-shell -p clang-tools cppcheck llvmPackages.openmp
๐ฆ Ubuntu/Debian
sudo apt update
sudo apt install clang-tidy cppcheck libomp-dev
# OpenMP is also included with GCC:
sudo apt install build-essential
๐ฆ Fedora
sudo dnf install clang-tools-extra cppcheck libomp-devel
# OpenMP is also included with GCC:
sudo dnf groupinstall 'Development Tools'
๐ฆ Arch Linux
sudo pacman -S clang cppcheck openmp
# Note: OpenMP is included with GCC on Arch
๐ฆ Windows
choco install llvm cppcheck
Using OpenMP in Your Code
Once OpenMP is detected, you can use it in your project:
# In your CMakeLists.txt
target_link_libraries(your_target PRIVATE OpenMP::OpenMP_CXX)
// In your C++ code
#include <omp.h>
int main() {
#pragma omp parallel for
for (int i = 0; i < 1000; i++) {
// This loop runs in parallel!
process(i);
}
}
Disabling (Not Recommended)
If you want to disable these features:
cmake --preset=dev -DENABLE_CLANG_TIDY=OFF -DENABLE_CPPCHECK=OFF -DENABLE_OPENMP=OFF
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
"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
For Normal Users (PyPI Installation)
| Command | Description |
|---|---|
uv tool install cmake-start |
Install from PyPI |
cmake-init my-app |
Create C++ executable |
cmake-init -s my-lib |
Create C++ library |
cmake-init -h my-headers |
Create header-only library |
cmake-init --c my-c-app |
Create C project |
cmake-init --std 20 my-app |
Use C++20 |
cmake-init -p conan my-app |
Use Conan package manager |
cmake-init --version |
Show version |
For Contributors (Development)
| Command | Description |
|---|---|
./tasks.sh setup |
Initial setup |
uv run cmake-init my-app |
Create project (from source) |
python build.py |
Build after editing templates |
python release.py patch |
Release new version to PyPI |
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?
โ
Smart code quality - detects clang-tidy/cppcheck, shows clear install instructions
โ
Nix-friendly - proper support for declarative and imperative workflows
โ
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, not forced requirements
โ
Cross-platform - macOS, Linux, Windows, NixOS, Nix
โ
Single source - edit cmake-init/, run build.py
Links
- CHANGELOG - See what's new!
- CMake Documentation
- UV Documentation
- clang-tidy Docs
- cppcheck Manual
- OpenMP Specification
- Report Issues
- Original cmake-init
Made with โค๏ธ for developers who hate boilerplate
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cmake_start-1.0.8.tar.gz.
File metadata
- Download URL: cmake_start-1.0.8.tar.gz
- Upload date:
- Size: 99.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
183e8a1c7c9ee83af5d97c136c815a25527f34270dfbe77f0b53f8ef1ce4d6c7
|
|
| MD5 |
a7469a5955030b8486c05885fb6510c6
|
|
| BLAKE2b-256 |
b30242e2f2db7fc1d168181aff312201a1206ce69c6549962e5104386b21bee7
|
File details
Details for the file cmake_start-1.0.8-py3-none-any.whl.
File metadata
- Download URL: cmake_start-1.0.8-py3-none-any.whl
- Upload date:
- Size: 61.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ed3a9d8aa8149c6afe918fdd406fa77e7cd5fa31dbf49782872132ade017cbac
|
|
| MD5 |
bcbed7c011e2554fffee6ed29013582f
|
|
| BLAKE2b-256 |
1ce80bb440a72ea0d7f178fa17434ef49994e9a1b6ac3c2cb6709d6634086666
|