Various utilities to help develop C++/CMake projects
Project description
cmake-common
Various utilities to help develop C++/CMake projects.
Toolchains
Supported platform/build system/compiler combinations include, but are not limited to:
Platform | Build system | Compiler |
---|---|---|
Linux | make | Clang |
GCC | ||
MinGW-w64 | ||
Windows | make [1] | Clang (clang/clang++) |
Clang (clang-cl [2]) | ||
MinGW-w64 | ||
msbuild | MSVC | |
Cygwin | make | Clang |
GCC | ||
MinGW-w64 |
- Both GNU
make
and MinGWmingw32-make
. - Boost 1.69.0 or higher only.
All of those are verified continuously by the "Boost (toolsets)" and "Examples (toolsets)" workflows.
Usage
common.cmake
Use in a project by putting
include(path/to/common.cmake)
in CMakeLists.txt.
This file aids in quick-and-dirty development by
- linking everything (including the runtime) statically by default,
- setting some useful compilation options (enables warnings, defines useful Windows-specific macros, strips debug symbols in release builds, etc.).
Everything is optional (use the CC_*
CMake options to opt out).
Boost
Download & build the Boost libraries in a cross-platform way.
$ python3 -m project.boost.download 1.72.0
...
$ python3 -m project.boost.build -- boost_1_72_0/ --with-filesystem --with-program_options
...
Pass the --help
flag to view detailed usage information.
$ python3 -m project.boost.download --help
$ python3 -m project.boost.build --help
CMake project
Build (and optionally, install) a CMake project.
$ python3 -m project.cmake.build --configuration Release --install path/to/somewhere -- examples/simple
...
$ ./path/to/somewhere/bin/foo
foo
Pass the --help
flag to view detailed usage information.
$ python3 -m project.cmake.build --help
CI
Utility modules project.ci.boost
and project.ci.cmake
allow building Boost
and CMake projects on multiple CI systems.
They work by calling the generic scripts from above, auto-filling some
parameters from environment variables.
Travis | AppVeyor | GitHub Actions | |
---|---|---|---|
--toolset |
$TOOLSET |
%TOOLSET% |
$TOOLSET |
--platform |
$PLATFORM |
%PLATFORM% |
$PLATFORM |
--configuration |
$CONFIGURATION |
%CONFIGURATION% |
$CONFIGURATION |
Boost version | $BOOST_VERSION |
%BOOST_VERSION% |
$BOOST_VERSION |
Boost path | $TRAVIS_BUILD_DIR/../build/boost |
%APPVEYOR_BUILD_FOLDER%\..\build\boost |
$GITHUB_WORKSPACE/../build/boost |
Build path | $TRAVIS_BUILD_DIR/../build/cmake |
%APPVEYOR_BUILD_FOLDER%\..\build\cmake |
$GITHUB_WORKSPACE/../build/cmake |
Install path | $TRAVIS_BUILD_DIR/../build/install |
%APPVEYOR_BUILD_FOLDER%\..\build\install |
$GITHUB_WORKSPACE/../build/install |
For example, the following Travis workflow:
language: cpp
os: linux
dist: focal
env:
global:
boost_version: 1.65.0
jobs:
- configuration=Debug platform=x64
- configuration=Release platform=x64
before_script: python3 -m project.ci.boost -- --with-filesystem
script: python3 -m project.ci.cmake --install
is roughly equivalent to running
python3 -m project.boost.download --cache "$TRAVIS_BUILD_DIR/../build" -- 1.65.0
mv -- \
"$TRAVIS_BUILD_DIR/../build/boost_1_65_0" \
"$TRAVIS_BUILD_DIR/../build/boost"
python3 -m project.boost.build \
--platform x64 \
--configuration Debug Release \
-- \
"$TRAVIS_BUILD_DIR/../build/boost" \
--with-filesystem
for configuration in Debug Release; do
python3 -m project.cmake.build \
--platform x64 \
--configuration "$configuration" \
--boost "$TRAVIS_BUILD_DIR/../build/boost" \
--build "$TRAVIS_BUILD_DIR/../build/cmake" \
--install "$TRAVIS_BUILD_DIR/../build/install" \
-- \
"$TRAVIS_BUILD_DIR"
done
Tools
- project-clang-format —
clang-format
all C/C++ files in the project. - ctest-driver — wrap an executable for testing with CTest;
cross-platform
grep
.
Examples
I use this in all of my C++/CMake projects, e.g. aes-tools and math-server.
License
Distributed under the MIT License. See LICENSE.txt for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for cmake_common-0.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e1e852e8b8d7c7ae5b0738cfe92d03e592c31b062eb2a2aa2f3679bb19af22ef |
|
MD5 | ae0083370d6ec80deb6f61f11c6cd6e5 |
|
BLAKE2b-256 | 9487ac92a04aa9f9245337a878d2a34f4be207933dbfa35d08fe130e563f4c57 |