Paul Fultz II wrote:
Instead a top-level cmake can bring the packages together, something like:
set(BOOST_ALL TRUE) # Whatever cmake modulues boost provide include(cmake/BoostModules.cmake)
Something like that, although BOOST_ALL does not strike me as quite correct a name, I'd call that BOOST_IS_LOCAL. (It doesn't have to be all of Boost, could be a subset.) We'll probably also need set(BOOST_ROOT ${CMAKE_SOURCE_DIR})
# Include the libraries # Perhaps this could be globbed add_subdirectory(libs/fit) add_subdirectory(libs/hana)
It has to be globbed, for the same reason. Subsets should be supported.
Then in the library, the cmake would do something like this:
# We are building standalone if(NOT BOOST_ALL) # BoostModules must be installed first, before building standalone find_package(BoostModulues) endif()
# Find the dependent boost libraries find_boost_lib(BOOST_LIBS asio hana)
So now, when building standalone `find_boost_lib` will call `find_package` to retrieve the exported targets. If its building in-tree, then `find_boost_lib` will just find the target name, and let cmake resolve the target during build.
Yes, this could work for possibly-standalone libraries.