This is an example of how to create a Modern CMake C++ Project.
This project should run on GNU/Linux, MacOS and Windows.
You'll need:
- "CMake >= 3.16".
The project layout is as follow:
-
CMakeLists.txt Top-level for CMake based build.
-
cmake Subsidiary CMake files.
-
ci Root directory for continuous integration.
-
Foo Root directory for
Foo
library.- CMakeLists.txt for
Foo
. - include public folder.
- src private folder.
- CMakeLists.txt for
-
Bar Root directory for
Bar
library.- CMakeLists.txt for
Bar
. - include public folder.
- src private folder.
- CMakeLists.txt for
-
FooBar Root directory for
FooBar
library.- CMakeLists.txt for
FooBar
. - include public folder.
- src private folder.
- CMakeLists.txt for
-
FooBarApp Root directory for
FooBarApp
executable.- CMakeLists.txt for
FooBarApp
. - src private folder.
- CMakeLists.txt for
To complexify a little, the CMake project is composed of three libraries (Foo, Bar and FooBar) with the following dependencies:
Foo:
Bar:
FooBar: PUBLIC Foo PRIVATE Bar
FooBarApp: PRIVATE FooBar
note: Since Foo
is a public dependency of FooBar
, then FooBarApp
will
see Foo
inlude directories
To build the C++ project, as usual:
cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release
Few links on the subject...
Project layout:
- The Pitchfork Layout Revision 1 (cxx-pflR1)
CMake:
- https://llvm.org/docs/CMakePrimer.html
- https://cliutils.gitlab.io/modern-cmake/
- https://cgold.readthedocs.io/en/latest/
Image has been generated using plantuml:
plantuml -Tsvg docs/{file}.dot
So you can find the dot source files in ci/docs.
Apache 2. See the LICENSE file for details.
This is not an official Google product, it is just code that happens to be owned by Google.