A modern cmake starter project for C++ with a complete build lifecycle, testing, dependency management, etc. Portable across Linux, OS X and Windows.
increase ccache hit rate (a22a912)
more robust handling of contract checking mode (304e9ae)
When linking against the contract checking and enforcement library
asap-contract
(https://github.com/asap-projects/asap-contract), it is
possible to control the contract checking mode by passing a value for the
CONTRACTS
option when adding any type of target with asap_add_xxx
API (e.g. asap_add_library. asap_add_test, etc):
CONTRACTS OFF : set contract checking mode to OFF
CONTRACTS AUDIT : set contract checking mode to AUDIT
CONTRACTS DEFAULT : set contract checking mode to DEFAULT
CONTRACTS AUTO : set contract checking mode using as a first priority the
value passed in the cmake option OPTION_CONTRACT_MODE
. If none is present,
automatically set the mode based on the build configuration. For Debug ->
AUDIT, For Release and RelMinSize -> OFF, and for RelWithDebInfo -> DEFAULT.
CONTRACTS TESTING : indicates that contracts are being testing and the target needs to have full control on the contract checking mode. Nothing will be done here.
The default setting is AUTO.
build: #21 target option WARNING
not propagated properly (432cdaf)
By default, for every target we build, a compiler option will be added
to treat warnings as errors, unless the target is added with WARNING
as
an option.
When that option is used, we now properly propagate it to set the corresponding compiler option to NOT treat warnings as errors.
This is useful when 3rd party dependencies have include files that generate warnings.
More robust implementation of fatser builds with ccache
option to control the use of ccache, default is OFF (49a17a9)
Caching is enabled in GitHub CI builds and can be enabled in development environments by simply setting the cmake variable USE_CCACHE
to 'ON'/'TRUE' or equivalent.
A precondition for the environment is of course to have ccache
installed which gets done automatically in GitHub workflows, but needs to be done in development environments. It is recommended to use brew/choco for MacOS/Windows, but to install from the pre-built binaries for Linux as the version that comes with most distros is quite old.
It is to be noted that ccache
with MSVC on Windows may have some issues and if that is the case, simply do not use it.
version-info
tool
Add the version-info
tool to print the project info (cb228e8)
This tool uses the generated version.h
file in a small C++ program
to print the project's info, as defined in the project's master
CMakeLists.txt
.
It also constitutes an example of how to use the version.h
file and
a simple test to check that the asap
infrastructure for defining and
building targets is working.
More visibility on project/module nesting
Enhance configure logs with project/module nesting hierarchy (f6c13f2)
Track the projects/modules nesting level with a hierarchy stack updated when we enter/exit a project/module. Most of the management is done automatically as helper functions get called to add modules or external packages. Some of the boilerplate (minimal) is still manual:
CMakeLists.txt
, the project needs to pushed at the
beginning and popped at the end.CMakeLists.txt
, the module needs to be pushed at
the start and popped at the end.Use the ASAP_LOG_PROJECT_HIERARCHY
to get a string that contains
the nesting hierarchy.
Formatting
Implement robust project-wide formatting (afcaebe)
Now we can format cmake files with cmake-format and any of the file types supported by clang-format (including C++, JavaScript and Json) with clang-format.
The following additional targets are defined:
Dedicated targets for each of cmake-format
and clang-format
are also added (e.g. cmake-format, clang-format, check-clang-format,...)
version.h
should follow project naming (329bcdf)asap
.