17
Project structure using meson.build and c++
You are ready to start your new C++ project from scratch and you want to go with Test Driven Development approach. Where to start? How to structure your project?
In this post series I will try to answer those questions using meson.build
as a build system.
What we want to have on top level(root) of our project:
├── include
├── meson.build
├── src
├── subprojects
└── test
include
directory will contain header files
src
directory will contain source files
subprojects
directory will contain third party projects that use meson.build
as a build system
test
directory will contain everything related to tests
meson.build
file containing build description for meson build system
I usually group header files into sub directories inside include directory:
├── include
│ ├── bar
│ │ └── random.hpp
│ │ └── ...
│ ├── foo
│ │ └── dummy.hpp
│ │ └── ...
│ └── tar
│ └── generator.hpp
│ └── ...
├── meson.build
├── src
├── subprojects
└── test
Same goes for source files, if there is source file for specific header (if is not header only):
├── include
├── meson.build
├── src
| ├── meson.build
│ ├── bar
│ │ └── random.cpp
│ │ └── ...
│ ├── foo
│ │ └── dummy.cpp
│ │ └── ...
│ └── tar
│ └── generator.cpp
│ └── ...
├── subprojects
└── test
Lets take closer look at test directory. What we actually want is to support Testing Pyramid
, so we will have something like this:
├── include
├── meson.build
├── src
├── subprojects
└── test
├── meson.build
├── unit_tests
│ └── [List of all unit tests].cpp
│ └── meson.build
├── integration_tests
│ └── [List of all integration tests].cpp
│ └── meson.build
├── component_tests
│ └── [List of all component tests].cpp
│ └── meson.build
└── system_tests
└── [List of all system tests].cpp
└── meson.build
That is it for Part I. In the next Part we will see how to actually write meson.build
description file to support presented structure.
NOTE: This is my first post.
If you find this content interesting, please let me know.
17