Metadata-Version: 2.1
Name: cmake-common
Version: 2.2
Summary: Various utilities to help develop C++/CMake projects
Home-page: https://github.com/egor-tensin/cmake-common
Author: Egor Tensin
Author-email: Egor.Tensin@gmail.com
License: MIT
Project-URL: Bug Tracker, https://github.com/egor-tensin/cmake-common/issues
Description: cmake-common
        ============
        
        [![Basic usage](https://github.com/egor-tensin/cmake-common/actions/workflows/basic.yml/badge.svg)](https://github.com/egor-tensin/cmake-common/actions/workflows/basic.yml)
        [![Boost (toolsets)](https://github.com/egor-tensin/cmake-common/actions/workflows/boost_toolsets.yml/badge.svg)](https://github.com/egor-tensin/cmake-common/actions/workflows/boost_toolsets.yml)
        [![Examples (toolsets)](https://github.com/egor-tensin/cmake-common/actions/workflows/example_toolsets.yml/badge.svg)](https://github.com/egor-tensin/cmake-common/actions/workflows/example_toolsets.yml)
        
        Various utilities to help develop C++/CMake projects.
        
        Installation
        ------------
        
        * Via PyPI:
        
              pip install cmake-common
        
        * As a submodule:
        
              git submodule add https://github.com/egor-tensin/cmake-common.git
        
          All the scripts provided by the PyPI package are thin wrappers around the
          `project` package modules:
        
          | Script         | Module
          | -------------- | ------
          | boost-download | `python3 -m project.boost.download`
          | boost-build    | `python3 -m project.boost.build`
          | cmake-build    | `python3 -m project.cmake.build`
          | ci-boost       | `python3 -m project.ci.boost`
          | ci-cmake       | `python3 -m project.ci.cmake`
        
        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
        
        1. Both GNU `make` and MinGW `mingw32-make`.
        2. Boost 1.69.0 or higher only.
        
        All of those are verified continuously by the [Boost (toolsets)] and [Examples
        (toolsets)] workflows.
        
        [Boost (toolsets)]: https://github.com/egor-tensin/cmake-common/actions/workflows/boost_toolsets.yml
        [Examples (toolsets)]: https://github.com/egor-tensin/cmake-common/actions/workflows/example_toolsets.yml
        
        Usage
        -----
        
        ### Boost
        
        Download & build the Boost libraries in a cross-platform way.
        
            $ boost-download 1.72.0
            ...
        
            $ boost-build -- boost_1_72_0/ --with-filesystem --with-program_options
            ...
        
        Pass the `--help` flag to view detailed usage information.
        
        ### CMake project
        
        Build (and optionally, install) a CMake project.
        
            $ cmake-build --configuration Release --install path/to/somewhere --boost path/to/boost -- examples/simple
            ...
        
            $ ./path/to/somewhere/bin/foo
            foo
        
        Pass the `--help` flag to view detailed usage information.
        
        ### 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).
        
        ### CI
        
        Utility scripts `ci-boost` and `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 an example of how to integrate `ci-boost` and `ci-cmake` into a CI
        workflow, see [docs/ci.md](docs/ci.md).
        
        Tools
        -----
        
        * [project-clang-format.py] &mdash; `clang-format` all C/C++ files in the
        project.
        * [ctest-driver.py] &mdash; wrap an executable for testing with CTest;
        cross-platform `grep`.
        
        [project-clang-format.py]: docs/project-clang-format.md
        [ctest-driver.py]: docs/ctest-driver.md
        
        Examples
        --------
        
        I use this in all of my C++/CMake projects, e.g. [aes-tools] and [math-server].
        
        [aes-tools]: https://github.com/egor-tensin/aes-tools
        [math-server]: https://github.com/egor-tensin/math-server
        
        License
        -------
        
        Distributed under the MIT License.
        See [LICENSE.txt] for details.
        
        [LICENSE.txt]: LICENSE.txt
        
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: C++
Classifier: Topic :: Software Development :: Build Tools
Requires-Python: >=3.6
Description-Content-Type: text/markdown
