summaryrefslogtreecommitdiffstatshomepage
path: root/README.md
blob: a7bfab95d6260bbd662c55cdd1161ae9c7455f75 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
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)

Utilities to help develop C++/CMake projects.

Description
-----------

This main goal of this project is to make it easier to build (potentially,
cross-compile) Boost and CMake projects using different toolsets.
It does so by providing a set of command-line utilities that allow users to
download/build Boost & use it in a CMake project in a consistent way — no
matter the compiler or the target platform.

Installation
------------

* Python: [PyPI](https://pypi.org/project/cmake-common/)
* Arch Linux: [AUR](https://aur.archlinux.org/packages/cmake-common)

Alternatively, you can simply checkout this repository or use it as a git
submodule.
All scripts provided by the PyPI package are thin wrappers around the `project`
package modules:

| Script         | Module
| -------------- | ------
| boost-download | `python -m project.boost.download`
| boost-build    | `python -m project.boost.build`
| project-build  | `python -m project.build`

Toolsets
--------

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 \[2\] |
|          |                | MinGW-w64   |
|          | msbuild        | MSVC        |

1. Both GNU make and MinGW mingw32-make.
2. clang-cl is supported by Boost 1.69.0 or higher only.

All of those are verified continuously by the [Boost (toolsets)] and [Examples
(toolsets)] workflows.

For a complete list of possible `--toolset` parameter values, pass the
`--help-toolsets` flag to either `boost-build` or `project-build`.

[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/ filesystem program_options
    ...

Pass the `--help` flag to view detailed usage information.

### CMake project

Build (and optionally, install) a CMake project.

    $ project-build --configuration release --install path/to/somewhere --boost path/to/boost -- examples/simple build/
    ...

    $ ./path/to/somewhere/bin/foo
    foo

Pass the `--help` flag to view detailed usage information.

Additional tools
----------------

* [project-format] — `clang-format` all C/C++ files in the project.
* [project-ctest-driver] — wrap an executable for testing with CTest;
cross-platform `grep`.

[project-format]: docs/project-clang-format.md
[project-ctest-driver]: 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