Documentation
CCLM is a command-line tool created by Rudolf Müller in C++ for managing C/C++ libraries.
Libraries can be installed from Git repositories Prototype written in Python.
POSIX only
| Platform | Compatibility |
|---|---|
| Linux | ✔️ Yes |
| macOS | ⚙️ Untested |
| Windows | ❌ Definitely not |
Why CCLM
+ Advantages
- Works for both C and C++ projects
- Highly flexible configuration system
- Simple and predictable command-line usage
- Relies only on proven POSIX tools
- Safety
- Supports library versioning
- Can build both static and shared libraries
- No external dependencies
- Install-and-start philosophy
- Open-source under the MIT license
- Clean and readable documentation
- CCLM is built entirely from scratch without external libraries (except for the use of shell commands).
- Disadvantages
- POSIX-only (Linux focused)
- Still young project with possible bugs
- Small community
- No official centralized package database
- Requires an internet connection for installs
Installation for pacman (archlinux)
„sorry but if you want install on other distros than arch, pls wait“ - Rudolf Müller 2026
Clone the repository:
$ git clone "https://github.com/rudolfmuller/cclm-package-manager.git"
Go in to the repo:
$ cd cclm-package-manager
Make tar file (xyz is version, ok? ok ,ok):
$ tar -czf cclm-x.y.z.tar.gz .
Make package, and install:
$ makepkg -si
Tests cclm if works:
$ cclm -v
Remove build directory:
$ rm -rf cclm-package-manager
All-in-one line (I dont recommend):
$ git clone "https://github.com/rudolfmuller/cclm-package-manager.git" && cd cclm-package-manager && tar -czf cclm-x.y.z.tar.gz . && makepkg -si && cclm -v && cd .. && rm -rf cclm-package-manager
Quick Start
Using and Installing a Library
- Install the necessary library:
$ cclm install "rudolfmuller" "fmt-lib" - Initialize your project:
and edit the configuration file as needed.$ cclm init - Run your project:
$ cclm run
Creating a Library
- Initialize the library:
and edit the configuration file as needed.$ cclm init --lib - Upload it to GitHub, ideally with the suffix
-libto indicate that it is a library.
Environmental variables
All default paths are based on
so if you store programs in
$PATHso if you store programs in
$PATH, you will don't need to use export.
| Environment variable | Default value | Description |
|---|---|---|
$CCLM_CCLM_FILE_NAME |
ccfile |
Name of the library metadata file |
$CCLM_GIT_PATH |
git |
Path to the git executable |
$CCLM_GCC_PATH |
gcc |
Path to the GCC C compiler |
$CCLM_GXX_PATH |
g++ |
Path to the GCC C++ compiler |
$CCLM_AR_PATH |
ar |
Path to the static library archiver |
$ export CCLM_GIT_PATH=/usr/bin/git
Commands
| Flag | Description |
|---|---|
--version / -v | Show current CCLM version |
--help / -h | Show help message |
--force / -f | Execute command without confirmation |
--url / -u | Takes the raw url address instead of the author and package name |
--lib / -L | Switch for init mode to library |
--local / -l | Switch for install to local mode |
--debug / -d | Switch to debug mode |
Always place switches at the end of the command.
$ cclm install -u "https://github.com/rudolfmuller/ctml-lib.git"
output:
fatal: library is not accessible
log:
error: unknown switch `u'
usage: git ls-remote [--branches] [--tags] [--refs] [--upload-pack=<exec>]
[-q | --quiet] [--exit-code] [--get-url] [--sort=<key>]
[--symref] [<repository> [<patterns>...]]
-q, --[no-]quiet do not print remote URL
--[no-]upload-pack <exec>
path of git-upload-pack on the remote host
-t, --[no-]tags limit to tags
-b, --[no-]branches limit to branches
--[no-]refs do not show peeled tags
--[no-]get-url take url.<base>.insteadOf into account
--[no-]sort <key> field name to sort on
--[no-]exit-code exit with exit code 2 if no matching refs are found
--[no-]symref show underlying ref in addition to the object pointed by it
-o, --[no-]server-option <server-specific>
option to transmit
init – Initalizon the cclm project. Supports
-L.
$ cclm init [-L]
The init command may fail if the folder is not empty.
Before using it, please make sure that the folder you want to initialize is really empty (there could be a collision of names).
Before using it, please make sure that the folder you want to initialize is really empty (there could be a collision of names).
install – Downloads a repository from GitHub, stores it in the
.cclm folder, and compiles it. Supports -f -u -l.
$ cclm install <user> <repo> [-f] [-u] [-l]
remove – Removes a library and its metadata. Supports -f.
$ cclm remove <library_name> [-f]
run – Compile and run your project.
$ cclm run
purge – Deletes binaries and residual files of a library. Supports -f.
$ cclm purge [-f]
template – Copies a file from the templates folder to create a project template.
$ cclm template <template_name>
search – Checks if a repository exists on GitHub.
$ cclm search <user> <repo>
exist – Checks if a library is installed.
$ cclm exist <library_name>
ls – Lists all libraries in the .cclm folder.
$ cclm ls
clean – Remove unnecessary files.
$ cclm clean
git – Calls the git command and passes arguments (for debugging purposes).
$ cclm git <git_args>
info – Displays library metadata.
$ cclm info <library_name>
report – Opens the library's GitHub repository to report issues in the browser.
$ cclm report <library_name>
website – Opens the library's website in the browser.
$ cclm website <library_name>
export – Creates an export file containing the URL address for installing libraries (sum file)
$ cclm export
import – Can import (install) libraries from library_export.txt or other
$ cclm import <file_name>
clone – Clone from git repository.
$ cclm clone <user> <repo>