SBuildr - Stupid Buildr¶
A stupid, simple python-based meta-build system for C++ projects.
Installing from PyPI¶
pip install sbuildr
A Small Example¶
For this example, we will assume the following directory structure:
minimal_project ├── build.py ├── include │ └── math.hpp ├── src │ ├── factorial.cpp │ ├── factorial.hpp │ ├── fibonacci.cpp │ ├── fibonacci.hpp │ └── utils.hpp └── tests └── test.cpp
build.py file might look like this:
#!/usr/bin/env python import sbuildr import os project = sbuildr.Project() # Build a library using two source files. Note that headers do not have to be specified manually. # Full file paths are only required in cases where a partial path would be ambiguous. libmath = project.library("math", sources=["factorial.cpp", "fibonacci.cpp"], libs=["stdc++"]) # Specify that math.hpp is part of the public API for this library. project.interfaces(["math.hpp"]) # Specify a test for the project using the test.cpp source file. The resulting executable will # be linked against the library created above. test = project.test("test", sources=["test.cpp"], libs=["stdc++", libmath]) # Enable this script to be used interactively on the command-line sbuildr.cli(project)
The call to the
cli() function allows us to use the script to build interactively in a shell.
For example, to run all tests registered for this project, you can run:
./build.py test. This will configure the project, build all dependencies, and finally run tests.
To view all available commands, you can run
- SBuildr’s header scanning functionality does not take into account preprocessor
#ifdefs. This means that an
falsebranch will still be used as a dependency during builds. Header scanning will also not work for paths containing escaped characters.