Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Howto find header-only libraries properly #64

Open
sodevel opened this issue Jun 7, 2024 · 3 comments
Open

Howto find header-only libraries properly #64

sodevel opened this issue Jun 7, 2024 · 3 comments

Comments

@sodevel
Copy link

sodevel commented Jun 7, 2024

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?

@pdimov
Copy link
Member

pdimov commented Jun 7, 2024

Support for a "real" Boost::headers target has been added and will be available in the next release; see #61.

It's not on by default, though; you have to set BOOST_ENABLE_COMPATIBILITY_TARGETS=ON.

@pdimov
Copy link
Member

pdimov commented Jun 7, 2024

See 0994f04 and 33c036b.

@sodevel
Copy link
Author

sodevel commented Jun 7, 2024

Ah thanks, so everything stays as-is.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants