# Introduction Have you ever wondered, if you want to compile a C++ program, why you always need to learn another language to make it build properly with dependency tracking and so on. Many good build-systems exists which all have their strengths and weeknesses autotools, cmake, meson to name a few. `cppbuild` tries to make it possible to use all the cool features of the above in a tool only using C++ (through the compiler). ## Getting Started: 3 Simple Steps Step 1: Create a build configuration, in C++ A really simple example ('hello_config.cc'): ```c++ #include "libcppbuild.h" namespace { BuildConfigurations helloConfigs() { return { { .target = "hello", .sources = { "hello.cc", }, .cxxflags = { "-Wall", "-std=c++17", } }, }; } REG(helloConfigs); } ``` Step 2: Bootstrap the system by compiling your build configuration along with the libcppbuild.a static library: ```sh g++ -std=c++17 hello_config.cc -pthread libcppbuild.a -o cppbuild ``` Step 3: Run cppbuild to build you application: ```sh ./cppbuild ``` Any consecutive changes to the build configuration or any of the sources will automagically trigger a rebuild of all (and only) affected sources the next time cppbuild is executed.