我已下载并编译了boost。 我已将其安装在指定目录中并创建了适当的BoostConfig.cmake文件。
我有一个名为lib1的lib项目,它使用boost并使用find_package(...)找到它。
这一切都非常好,并且找到并使用了相应的CMAKE_PREFIX_PATH提升。
lib1使用boost by:
include_directories(${boost_INCLUDE_DIRS})
#no boost libs are used, thus no target_link_libraries(...)
以上都是有效的。 现在我有一个名为project1的项目。 Project1使用lib1并将其包含在:
add_subdirectory(lib1)
与以下链接:
target_link_libraries(project1 lib1)
然而,编译确实失败了,因为project1找不到lib1中包含的boost头。
我看到两个直接的解决方案: 1:在project1中明确包含boost headers1。 2:使用include_directories在lib1中包含boost标头(lib1 PUBLIC $ {boost_INCLUDE_DIRS})
我不喜欢解决方案1,因为我想只包含lib1,然后让系统解决lib1中的所有依赖关系
我不喜欢解决方案2,因为这有效地使得boost包含了lib1包含的一部分。
那么实现子项目(lib1)的这种包依赖的最佳/官方方式是什么?
此致 克劳斯
答案 0 :(得分:0)
我选择"解决方案2"对于我的项目。 Boost标头包含在我的lib的公共接口中,因此该lib的用户不必考虑自己包含boost标头。