所以我有两个项目,A和B,其中B依赖于A(A是库,而B是控制台应用程序)。 A使用boost库,并且已配置为包含头文件和库文件,但B没有。
Visual Studio抛出错误,指出无法找到Boost Header文件(在项目B中)。例如:
错误C1083:无法打开包含文件:'boost / asio.hpp':否此类文件或目录[项目:B]
我的问题是:是否有一种方式使B不必包括Boost库?
答案 0 :(得分:2)
是否有一种方式使B不必也包含Boost库?
是的,但前提是您可以避免将这些功能用作A类型/功能定义的一部分。如果它们可以真正用于实现,那么你可以避免头依赖 - 你仍然需要链接编译库(asio
需要boost-system
)。
答案 1 :(得分:1)
如果您从项目A中包含一个自己包含升压头的.h,则会出现问题。如果你只从项目A的cpp文件中包含你的boost hpp,并且你的库保持“无需增强”的界面,你应该没问题!
答案 2 :(得分:1)
如果A是一个很好的库,它应该只暴露一个接口和一个工厂,它是在裸露的头文件中定义的抽象类,不包括其他头文件。 听起来不是这样,但通常可以将任何库带到这种状态。 最糟糕的情况是,你必须建立一个类似包装器的去耦层。 另一种选择是将项目B设置为包含boost。您可能仍需要它供您自己使用...