项目lib取决于包。如何公开界面

时间:2016-02-14 11:14:37

标签: c++ boost cmake

我已下载并编译了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)的这种包依赖的最佳/官方方式是什么?

此致 克劳斯

1 个答案:

答案 0 :(得分:0)

我选择"解决方案2"对于我的项目。 Boost标头包含在我的lib的公共接口中,因此该lib的用户不必考虑自己包含boost标头。