如何将项目依赖项/引用从一个项目继承到Visual Studio中的依赖项目

Wag*_*n8r 6 c++ dependencies boost visual-studio-2010 dependency-management

我有项目1与Boost和GLM的依赖关系.对于Boost和GLM,我已经指定了"附加包含目录"来引用每个目录的C++文件.项目1创建为静态库项目.当我构建项目1时,一切都很好.项目2通过参考管理器引用项目1,但是当我构建项目2时,我得到了

fatal error C1083: Cannot open include file: 'boost/something/etc.

对于项目1中的文件.为什么在构建Project 2时会出现Project 1的错误?项目1还使用Boost中的正则表达式库,该库必须.lib在使用之前构建.如何使我的Project 1静态库将构建的Boost正则表达式库和GLM包含文件合并到其中?仅供参考,项目2是项目1的测试项目.我想要这样的事情:

(Boost正则表达式lib + GLM包括) - >项目1 ==> Project_1.lib

(Boost单元测试lib + Project_1.lib) - > Project 2 ==> Project_2.exe

-->表示依赖关系/引用并==>表示输出.

这可能吗?我得到了更多的编译错误和链接器错误,因为我在这上面旋转我的轮子.

Pre*_*eti 5

这可能是因为Project 2中的某些代码(标头和/或实现)包含来自Project 1的标头,而这些标头又包含不在Project 2的include路径中的外部库标头.净效果是扩展所有的#includes之后,你的Project 2源文件将有一行代表:#include <boost/something/etc>它不能扩展,因为它不在Project 2的包含搜索路径中.

无论您是否已将这些外部库静态编译到您的中,都会发生此错误project1.lib.

如果它不是问题,只需将外部库包含路径添加到Project 2的VC++目录> include目录.

解决此问题的一种方法是移动尽可能多的外部库,包括Project 1标头之外,并使用PIMPL模式和前向声明的组合来隐藏它们.但对于像标题或模板重型库这样的东西,我相信你需要包含那些标题路径,除非你封装功能或隐藏Project 1类/接口后面的实现,否则没有办法解决它.