如何在 Visual Studio 2015 中构建具有循环依赖性的 C++ 项目?

How can I build a C++ project in Visual Studio 2015 with circular dependencies?

首先,这是我继承的旧代码,我很想清理它并在某一天使它变得完美,但我今天不能这样做。因此,我要求不要给出"rewrite the whole thing so that there are no circular dependencies"这样的答案。

我有一个包含 44 个项目的解决方案。大多数项目构建 DLL 和一些构建可执行文件。有多个项目依赖于另一个项目,以某种方式需要第一个项目。有些像 A 需要 B.lib 和 B 需要 A.lib 一样简单,而另一些则是更长的环回链。

当我继承代码时,它并不干净,源代码中仍有旧的构建文件,即 .LIB 文件。在不删除这些 .LIB 文件的情况下,所有 44 个项目都能够构建,并且所有旧的 .LIB 文件都被新构建的文件替换。这告诉我,如果我第二次构建,将使用 none 个旧的 .LIB,并且我的所有可交付成果现在完全由当前源生成。

这给我留下了一个问题:我想从版本控制中清除所有 none 源文件,但如果这样做,我将无法再构建项目。

为了进一步说明,构建 DLL 的项目创建一个 .LIB 文件作为中间步骤,这些文件被复制到每个项目的 "Additional Library Directories" 属性 中列出的公共文件夹中给定项目所需的各个 .LIB 文件位于该项目的 "Additional Dependencies" 属性 中。

编辑: 我不打算对代码进行大修。我知道所有项目需要的所有目标文件都已创建。我也知道这个结构不是最优的。但是,我确实相信,如果链接器知道在哪里查找,它可以找到所需的一切。

只从 A 中提取 B 需要的部分到新的 DLL 中 'C'。然后让 A 都依赖于 B 和 C,而 B 只依赖于 C。

这并不容易,但一次只提取一点点。