2012-11-12 44 views
3

所以我有两个项目,A和B,其中B是依赖于A(A是一个库,而B是一个控制台应用程序)。 A使用boost库,并已配置为包含头文件和库文件,但B没有。头文件跨项目

Visual Studio会抛出一个错误,指出无法找到Boost头文件(在项目B中)。例如:

错误C1083:无法打开包含文件:“升压/ asio.hpp”:没有这样的文件或目录[工程:B]

我的问题是:是否有办法在B:不还必须包括Boost库以及?

回答

2

有没有办法让B不必包含Boost库?

是的,但前提是你可以避免使用这些特征作为A类型/函数定义的一部分。如果它们可以真正用于实现,那么你可以避免头依赖 - 你仍然需要链接到编译库(asio要求boost-system)。

+0

这些类有boost对象(private:boost :: asio :: io_service service),所以这意味着不可能将boost头包含在内,这意味着B必须包含头文件和编译的库,对吗? – Mike

+0

你是对的。 –

+0

哦,好的。不管怎么说,还是要谢谢你! – Mike

1

如果您在项目A中包含一个包含自身提升标题的.h,则会出现问题。如果您只包含项目A的cpp文件中的boost hpp,并且您的库中保留了“无需提升”的界面,则应该没问题!

1

如果A是一个很好的库,它应该只暴露一个接口和一个工厂,这是一个抽象类,它定义在一个裸露的标头中,并且不包含其他标头。 听起来像这样的情况并非如此,但通常可以将任何库带入此状态。 最糟糕的情况是,你将不得不建立一个类似包装的分离层。 另一种选择是设置您的项目B以包含提升。您可能仍然需要它以供您自己使用...

+1

我会尝试设计一种你描述的方式,谢谢你的建议。 – Mike