aboutsummaryrefslogtreecommitdiffstatshomepage

Build Boost

Test Boost.Python

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 the platform parameter and can be omitted. Use x86 if you want to build 32-bit binaries.
  • Release is the default value for the configuration parameter and can be omitted. Use Debug if you want to build debug binaries.
  • Set static to 1 if you want to build static libraries.
  • Set static-runtime to 1 if you want to link to the static runtime.

API

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.
  1. Toolset "msvc" can have an optional version suffix: msvc140, msvc141, msvc142, msvc143.
  2. 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 }}" \
        ...

Caching

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
  ...

Boost.Python

See an example CMakeLists.txt file for how to link to Boost.Python libraries using CMake.

Notes

  • 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.

License

Distributed under the MIT License. See LICENSE.txt for details.