Table of Contents
About Ctor
Welcome to the official ctor.cc C++ build system website!
Have you ever wondered, why, when you are a C++ programmer and you want to compile a C++ project, you also need to learn some other language (such as make, cmake, lua, python, m4, …) in order to be able to build your project?
Well, wonder no more - ctor is here!
“'ctor” is an often used short-hand form of the word “constructor” referring to the class function that sets up the internals of an object in object oriented programming - so the intended pronunciation of “ctor” is constructor but sometimes also referred to as see-tor.
Ctor is a C++ based build system, making it possible to configure and build complex projects without writing a single line of non-C++.
It aims towards the feature-richness found in auto-tools and beyond, but with a compilation speed rivalling that of raw makefiles.
And the only dependency is a functioning C++ compiler!
Get it
Clone:
git clone --recursive git://git.ctor.cc/ctor.git libctor
Browse the sources: http://cgit.ctor.cc/ctor.git/
License
Ctor is distributed under the BSD 2-Clause License. See accompanying file LICENSE for details.
Getting started
If the ctor library is already available as part of your distro skip directly to “How to set up your build configuration”.
Adding libctor to your project
Assuming you are working on a git repository:
git submodule add git://git.ctor.cc/ctor.git libctor git submodule update --init --recursive
This should give you all the files you need to build your code.
Enter the libctor dir and run the ./boostrap.sh
script, which will build the ctor binary.
Then run ./ctor
to build it - it will end up in the build subfolder.
How to set up your build configuration
Assuming that you have a project with a two C++ source files, hello.cc
and world.cc
, and would like to compile them into an application binary (target) with the name hello
:
In the root of your project you can create your first ctor.cc
build configuration file:
#include <ctor.h> namespace { ctor::build_configurations myConfigs(const ctor::settings& settings) { return { { .target = "hello", // output filename .sources = { "hello.cc", "world.cc" }, // list of source files to compile // See ctor.h for more options } }; } } // Register callback REG(myConfigs);
Now you just need to compile the ctor.cc
file along with the libctor.a
library:
g++ -std=c++20 ctor.cc -Llibctor/build -lctor -Ilibctor/src -pthread -o ctor
Finally the configure
step must be carried out to set (at least) the include and lib paths to ctor (this step can be skipped if ctor is installed in the system paths such as /usr/include
and /usr/lib
):
./ctor configure --ctor-includedir=libctor/src --ctor-libdir=libctor/build
One can advantageously put these commands into a boostrap.sh
script for the project. It will only be needed the first time ctor
is being built.
Finally, run ./ctor
to build your project.
Getting Help
To get help log on to libera.chat on the #ctor channel.