boostorg / boostorg/cmake

Howto find header-only libraries properly

Open
#64 3 comments 1 reaction 0 assignees View on GitHub
Dominant language
CMake
Stars
120
Forks
37
PR merge metrics
No merged PRs in 30d

Description

I am not sure if this is the right place to ask this question, but since it's CMake related, i give it a try.

First some background, i am using CMake to build my projects, most of my projects link against an installed Boost library, only very few projects compile a private version of Boost themself during their build and link against this one. Until recently i was using only B2 builds of Boost, but now i switched to CMake builds, mostly to profit of the transitive dependency resolution to reduce compilation for projects that build Boost themself. Of course i was hit by the problem that the target `Boost::headers` does nothing in that case and i have to link against header-only libraries directly.

Now i'm facing the difficulty that a big library of mine has to work in both environments, Boost as subproject and an external Boost. To find the external Boost header-only libraries i use the usual `find_package(Boost 1.84.0 REQUIRED headers)` call, this gives me `Boost::headers` to link against. This target also exists when using Boost as subproject, but in that case it is not `IMPORTED`. My first idea was, check if that target is `IMPORTED`, use it in that case, otherwise link against indiviual libraries. Doesn't look nice, but would work.

Looking at the CMake metadata of a CMake Boost build i saw that there is code to actually create targets for individual header-only libraries, but for this to get actually used, i also have to search for these libraries explicit like `find_package(Boost 1.84.0 REQUIRED asio smart_ptr)`. I like that approach but there is one problem, this does not work for a B2 build, that one does not contain targets for individual header-only libraries.

Now i wonder, what would be a future proof way to search for header-only libraries?

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.