所以我有两个项目,A 和 B,其中 B 依赖于 A(A 是库,而 B 是控制台应用程序)。A 使用 boost 库,并已配置为包含头文件和库文件,但 B 没有。
Visual Studio 抛出一个错误,提示找不到 Boost 头文件(在项目 B 中)。例如:
错误 C1083:无法打开包含文件:'boost/asio.hpp':没有此类文件或目录 [项目:B]
我的问题是:有没有办法使 B 也不必包含 Boost 库?
所以我有两个项目,A 和 B,其中 B 依赖于 A(A 是库,而 B 是控制台应用程序)。A 使用 boost 库,并已配置为包含头文件和库文件,但 B 没有。
Visual Studio 抛出一个错误,提示找不到 Boost 头文件(在项目 B 中)。例如:
错误 C1083:无法打开包含文件:'boost/asio.hpp':没有此类文件或目录 [项目:B]
我的问题是:有没有办法使 B 也不必包含 Boost 库?
有没有办法使 B 也不必包含 Boost 库?
是的,但前提是您可以避免将这些特性用作 A 的类型/函数定义的一部分。如果它们可以真正仅用于实现,那么您可以避免头文件依赖——您仍然需要链接到已编译的库(asio
requires boost-system
)。
如果您包含项目 A 中的 .h ,该 .h 本身包含一个 boost 标头,则会出现问题。如果你只从项目 A 的 cpp 文件中包含你的 boost hpp 并且你为你的库保留一个“无增强”接口,你应该没问题!
如果 A 是一个不错的库,它应该只公开一个接口和一个工厂,即在一个裸露的头文件中定义的抽象类,不包含其他头文件。听起来情况并非如此,但通常可以将任何库带到这种状态。最坏的情况是您必须构建一个类似包装器的解耦层。另一种选择是设置您的项目 B 以包含 boost。您可能仍然需要它供您自己使用...