This GitHub action downloads & builds Boost libraries in your workflow run.
- Downloads a distribution of the specified Boost version and unpacks it.
- Builds the required libraries using the specified toolset.
Use it in your workflow like this:
- name: Build Boost
id: boost
uses: egor-tensin/build-boost@v1
with:
version: 1.71.0
libraries: filesystem program_options system
platform: x64
configuration: Release
- name: Show paths
run: |
printf 'Boost has been unpacked to: %s\n' '${{ steps.boost.outputs.root }}'
printf 'Libraries can be found here: %s\n' '${{ steps.boost.outputs.librarydir }}'
shell: bash
x64
is the default value for theplatform
parameter and can be omitted. Usex86
if you want to build 32-bit binaries.Release
is the default value for theconfiguration
parameter and can be omitted. UseDebug
if you want to build debug binaries.- Set
static
to1
if you want to build static libraries. - Set
static-runtime
to1
if you want to link to the static runtime.
Input | Value | Default | Description |
---|---|---|---|
version | required | Boost version to build, e.g. 1.71.0 . |
|
libraries | required | Space-separated list of libraries to build, e.g. filesystem program_options system . |
|
toolset | auto | ✓ | Use GCC on Linux and MSVC on Windows. |
msvc | Use MSVC. Supports different versions [1]. | ||
vs | Visual Studio; same as "msvc". Supports different versions [2]. | ||
gcc | Use GCC. | ||
mingw | Use MinGW-w64. | ||
clang | Use Clang. | ||
platform | x64 | ✓ | Build 64-bit binaries. |
x86 | Build 32-bit binaries. | ||
configuration | Release | ✓ | Build Release binaries. |
Debug | Build Debug binaries. | ||
static | any | ✓ | Shared libraries. |
1 | Static libraries. | ||
static-runtime | any | ✓ | Link to the shared runtime. |
1 | Link to the static runtime. | ||
directory | empty | ✓ | Build in ${{ runner.workspace }}/boost . |
any | Build in a custom directory. |
- Toolset "msvc" can have an optional version suffix: msvc140, msvc141, msvc142, msvc143.
- Toolset "vs" can have an optional version suffix: vs2015, vs2017, vs2019, vs2022.
Output | Example | CMake input | Description |
---|---|---|---|
root | D:\a\project\boost | BOOST_ROOT | Root Boost directory. |
librarydir | D:\a\project\boost\stage\x64\Debug\lib | BOOST_LIBRARYDIR | Directory that contains the built libraries. |
Use the librarydir
output to locate the built libraries.
You can pass it to CMake using the BOOST_LIBRARYDIR
parameter:
> cmake -D "BOOST_ROOT=${{ steps.boost.outputs.root }}" \
-D "BOOST_LIBRARYDIR=${{ steps.boost.outputs.librarydir }}" \
...
Cache the Boost distribution archive by using the actions/cache
action.
For example, for Boost version 1.72.0:
- name: Cache Boost
uses: actions/cache@v2
with:
path: '${{ runner.workspace }}/boost_*.tar.gz'
key: 'boost-1.72.0'
- name: Build Boost
# This won't re-download the archive unnecessarily:
uses: egor-tensin/build-boost@v1
with:
version: 1.72.0
...
See an example CMakeLists.txt file for how to link to Boost.Python libraries using CMake.
- This action uses my other project cmake-common to actually download and build Boost.
- cmake-common sees a lot more testing than this action, while this action delegates almost everything to it.
- You can use my other actions setup-gcc, setup-mingw, setup-clang to set up different toolsets targetting both x86 and x64.
Distributed under the MIT License. See LICENSE.txt for details.