A modern, lightweight CLI tool for managing C and C++ projects
Features • Installation • Quick Start • Usage • Updating • Contributing
- 🎯 Interactive Mode - Just run
sticksfor guided project setup with arrow key navigation - 🚀 Quick Project Setup - Create new C/C++ projects with a single command
- 📁 Multiple Build Systems - Support for both Makefile and CMake with automatic conversion
- 🔨 Smart Structure - Auto-generates organized project structure with source files and build configs
- 📦 Dependency Management - Easily add/remove dependencies in your Makefile
- 🔧 Multi-Source Support - Add multiple source files with automatic build integration
- 📝 Auto-Generated Config - Creates .gitignore, .editorconfig, Clang-format config, VSCode settings
- 🔄 Self-Updating - Built-in update mechanism that downloads from GitHub releases
- 📦 Package Manager Integration - Support for Conan and vcpkg for dependency management
- 🔧 Modular Features - Add/remove build systems and package managers to existing projects post-creation
- 🔀 Git Integration - Automatically initializes git repository when git is available
- ⚡ Command Aliases - Short aliases for faster typing (f, add-pm, rm-pm, etc.)
- 🎯 Zero Runtime Dependencies - Just needs GCC; no Rust/Cargo required after installation
- ✅ Quality Assured - Comprehensive test suite with 62 automated tests (100% coverage)
- 🔐 CI/CD Pipeline - Automated testing, building, and releases on every change
Choose the installation method that works best for you:
Package Name: sticks-aur
# Using an AUR helper (recommended)
yay -S sticks-aur
# or
paru -S sticks-aur
# Or manually clone from AUR
git clone https://aur.archlinux.org/sticks-aur.git
cd sticks-aur
makepkg -siSee sticks-aur repository for packaging details.
# Download the latest .deb package
wget https://github.com/mAmineChniti/sticks/releases/latest/download/sticks_0.3.6-1_amd64.deb
sudo dpkg -i sticks_*.debwget https://github.com/mAmineChniti/sticks/releases/latest/download/sticks-linux-x86_64
chmod +x sticks-linux-x86_64
sudo mv sticks-linux-x86_64 /usr/local/bin/stickscargo install sticksRequires Rust toolchain from rustup.rs.
# Clone the repository
git clone https://github.com/mAmineChniti/sticks.git
cd sticks
# Build release binary
cargo build --release
# Install (choose one)
sudo cp target/release/sticks /usr/local/bin/ # System-wide
# or
cp target/release/sticks ~/.local/bin/ # User onlyJust run sticks with no arguments for an interactive guided experience:
sticksFollow the prompts to:
- Enter your project name
- Choose language (C or C++)
- Select build system (Makefile or CMake)
- Your project is created!
Use arrow keys to navigate, Enter to select.
# Create a new C++ project with Makefile (default)
sticks cpp my-project
cd my-project
# Or with CMake build system
sticks cpp my-project --build cmake
cd my-project
# Add a dependency
sticks add libcurl
# Add more source files
sticks src utils network
# Build and run
make
./my-projectRun sticks without any arguments to enter interactive mode:
sticksThis launches a guided setup where you can:
- Enter project name
- Select language (C or C++) using arrow keys
- Choose build system (Makefile or CMake) using arrow keys
- Confirm with Enter to create your project
Common commands have short aliases for faster typing:
sticks i # sticks init
sticks s myfile # sticks src myfile
sticks a libcurl # sticks add libcurl
sticks r libcurl # sticks remove libcurl
sticks u # sticks update
sticks f # sticks featureFeature management also supports shortcuts:
sticks f list # List project features
sticks f add-pm conan myapp # Add Conan (shortcut for add-package-manager)
sticks f rm-pm vcpkg # Remove vcpkg (shortcut for remove-package-manager)
sticks f convert cmake # Convert build systemCreate a new project in a subdirectory:
sticks c my-c-project # New C project with Makefile
sticks cpp my-cpp-project # New C++ project with MakefileCreate with CMake build system:
sticks c my-project --build cmake # C project with CMake
sticks cpp my-project --build cmake # C++ project with CMakeCreate with package manager integration:
sticks cpp my-project --build cmake --package-manager conan # C++ with CMake and Conan
sticks c my-project --build cmake -p vcpkg # C with CMake and vcpkgInitialize in current directory:
sticks init c # Initialize C project here
sticks init cpp --build cmake # Initialize C++ project with CMakeAdd dependencies:
sticks add libcurl # Single dependency
sticks add openssl libpq zlib # Multiple dependenciesAutomatically updates your Makefile's install-deps target.
Remove dependencies:
sticks remove libcurl # Remove single dependency
sticks remove openssl libpq # Remove multiple dependenciesCleans up the install-deps rule automatically when empty.
sticks src utils # Adds src/utils.cpp (or .c) and header
sticks src network database # Add multiple source filesSticks will:
- Create source files in
src/ - Create corresponding headers
- Update build file (Makefile or CMakeLists.txt) automatically
Sticks supports C/C++ package managers for dependency management:
Create a project with Conan dependency management:
sticks cpp my-project --build cmake --package-manager conan
cd my-projectThis generates a conanfile.txt. To add dependencies:
-
Edit
conanfile.txtand add packages to the[requires]section:[requires] libcurl/7.85.0 openssl/1.1.1q -
Install dependencies:
conan install . --build=missing
Create a project with vcpkg:
sticks cpp my-project --build cmake --package-manager vcpkg
# or using short flag
sticks cpp my-project --build cmake -p vcpkg
cd my-projectThis generates a vcpkg.json. To add dependencies:
-
Edit
vcpkg.jsonand add packages to the"dependencies"array:"dependencies": [ "libcurl", "openssl" ]
-
Install:
./vcpkg/vcpkg install -
CMakeLists.txt is pre-configured to use vcpkg toolchain
After creating a project, you can add or modify features using the sticks feature (or sticks f for short) command:
List all detected features and configurations:
sticks f listOutput shows:
- Current build system (Makefile or CMake)
- Configured package managers
- Configuration files status
Change between Makefile and CMake:
# Convert Makefile project to CMake
sticks f convert cmake
# Convert CMake project to Makefile
sticks f convert makefile
# Optionally specify project name (auto-detected if omitted)
sticks f convert cmake my_projectThis will:
- Remove old build system file
- Generate new configuration with your source files
- Maintain project structure
Add Conan or vcpkg to an existing project:
# Add Conan to current project
sticks f add-pm conan
# Add vcpkg
sticks f add-pm vcpkg
# Specify project name if needed
sticks f add-pm conan my_projectRemove a package manager if you no longer need it:
sticks f rm-pm conan
sticks f rm-pm vcpkgStart with a bare Makefile project, then enhance it:
# Create basic C project with Makefile
sticks c my_app
cd my_app
# Later, add CMake support
sticks f convert cmake
# Then add Conan for dependencies
sticks f add-pm conan
# View all features
sticks f listWhen you create a project, Sticks automatically generates:
- Build System Files:
MakefileorCMakeLists.txt(your choice) - Git:
.gitignore,.gitattributes(pre-configured for C/C++), auto-initializes git repository (if git is installed) - Code Style:
.editorconfig,.clang-format(consistent formatting) - IDE: VSCode
.vscode/settings.json,launch.json,tasks.json(if VS Code is installed) - Documentation:
README.md(project-specific template)
This gives you a professional, production-ready project structure out of the box!
sticks --help # Show all commands
sticks <command> --help # Help for specific command
sticks --version # Show versionSticks can update itself without requiring Rust/Cargo:
sticks updateThis downloads the latest binary from GitHub releases and replaces your installation.
Alternative update methods:
# Arch Linux (using AUR package manager)
# Package name: sticks-aur
yay -Syu sticks-aur
# or
paru -Syu sticks-aur
# Cargo installation
cargo install sticks --force# Cargo installation
cargo uninstall sticks
# Arch Linux (AUR package name: sticks-aur)
yay -R sticks-aur
# or
paru -R sticks-aur
# Debian/Ubuntu
sudo apt remove sticks
# Manual installation
sudo rm /usr/local/bin/sticks
# or
rm ~/.local/bin/sticksA typical sticks-managed project looks like:
my-project/
├── src/
│ ├── main.cpp # Entry point
│ ├── utils.cpp # Additional sources
│ └── network.cpp
├── include/
│ ├── utils.h # Headers
│ └── network.h
├── bin/ # Final compiled binaries (gitignored)
├── build/ # Object files and build artifacts (gitignored)
└── Makefile # Auto-generated, customizable- Language: Rust 2021 edition
- Dependencies: clap 4, anyhow (build-time only)
- Dev Dependencies: serial_test (for isolated test execution)
- Runtime Requirements: GCC (for compiling your C/C++ projects)
- Supported Architectures: x86_64
- Supported Platforms: Linux (Arch, Debian, Ubuntu, others)
- Test Coverage: 62 comprehensive tests covering all core functionality (100% coverage)
- CI/CD: Automated testing, building, and releases via GitHub Actions
We welcome contributions! Here's how to get involved:
- Report Issues: Found a bug? Open an issue
- Submit PRs: Fork the repo and submit pull requests
- Improve Docs: Help us make documentation better
See CONTRIBUTING.md for detailed guidelines.
This project is maintained by:
mAmineChniti Creator & Maintainer |
omibo Contributor |
This project is licensed under the MIT License. See the LICENSE file for details.
Maintainer: mAmineChniti
Email: emin.chniti@esprit.tn
Repository: github.com/mAmineChniti/sticks
AUR Package: aur.archlinux.org/packages/sticks-aur
Made with ❤️ for the C/C++ community