C++ 如何在MSVS2010中组织菱形样式的项目层次结构

C++ 如何在MSVS2010中组织菱形样式的项目层次结构,c++,c,visual-studio,visual-studio-2010,C++,C,Visual Studio,Visual Studio 2010,假设我们有Visual Studio 2010解决方案,其项目层次结构如图所示: 共有5个项目:1个应用程序,4个静态库,它们相互依赖,如图中箭头所示 在我们的实际解决方案中,有: 约15个“顶级”应用程序/DLL 4“1级”静态LIB(如A和B) 约30“2级”静态库(如C和D) 每个1级库依赖于几乎所有的2级库,每个应用程序依赖于1(很少是2-3)个1级静态库 问题是如何正确设置MSVS2010的框架和引用选项卡,以构建此配置并提供添加新顶级应用程序的简便方法。 Easy意味着我不想手

假设我们有Visual Studio 2010解决方案,其项目层次结构如图所示:

共有5个项目:1个应用程序,4个静态库,它们相互依赖,如图中箭头所示

在我们的实际解决方案中,有:

  • 约15个“顶级”应用程序/DLL
  • 4“1级”静态LIB(如A和B)
  • 约30“2级”静态库(如C和D)
每个1级库依赖于几乎所有的2级库,每个应用程序依赖于1(很少是2-3)个1级静态库

问题是如何正确设置MSVS2010的框架和引用选项卡,以构建此配置并提供添加新顶级应用程序的简便方法。 Easy意味着我不想手动将所有2级库添加到每个应用程序中。最好的解决方案是只从应用程序中引用1级库,而只从1级库中引用2级库

我已经尝试过以下方法:

  • 只需引用每个应用程序项目中的所有LIB。它可以工作,但很难维护:对于每个应用程序项目(最多可以有15个),您可以有30-35个参考。总共有近500篇参考文献
  • 最直接的方法是:从应用程序项目引用1级libs,从1级libs引用2级libs
  • 第二种方法可用于不同的链接库依赖项使用库依赖项输入标志值(每个参考值,而不是链接器/库管理员页面上的值!)

  • 在应用程序项目参考页面中,链接库依赖项为使用库依赖项输入。在库项目中,这两个值都是FALSE(默认值)。有时它可以工作(特别是在调用完整解决方案重建时),但从链接器和库管理员命令行(我在项目属性中看到它们)可以清楚地看到,它不应该工作-没有任何东西告诉链接器链接二级库。它们也没有打包到1级lib中(我从dumpbin输出中看到)。当我第一次在1级库上按“Build”,然后尝试“Build”应用程序时,它失败了

  • 与之前相同,但在1级库项目中,我为每个引用的2级库设置了链接库依赖项TRUE。这告诉图书管理员将2级库包含到1级库中(这可以通过dumpbin进行验证)。链接应用程序时会失败,因为每个级别2库存在于多个实例中—每个级别1库一个实例

  • 与#1相同,但在应用程序项目中为每个引用的1级库使用库依赖项输入TRUE。突然,使用此设置,应用程序链接器现在链接整个层次结构中来自级别1和级别2库的所有对象文件。这很有效,但这种行为看起来像某种魔法,我不清楚。当我只引用应用程序中的1级lib时,为什么它链接2级库*.objs?如果这是正确的行为,那么为什么它不在方法1中链接二级LIB呢

  • 我们还在其他平台上使用CMake来构建这个项目,至少使用Makefiles generator,CMake可以很好地处理这样的项目层次结构——它只是在链接应用程序时链接所有层次结构级别的静态库