c++ - Visual Studio 无故重新编译在两个解决方案之间共享的项目

标签 c++ visual-studio visual-c++

我有两个解决方案 S1S2 引用了几个 C++ 项目:

Project    S1    S2
   A       x     x
   B       x     x
   C             x
   D       x

项目 AB 是静态库并在两种解决方案中使用,而 CD 是可执行文件使用 AB 并且每个都只是一个解决方案的一部分。

如果我对项目进行更改,VS 必须重新编译该项目及其使用者,这是预期的行为。但是,如果我构建其中一个解决方案,则另一个解决方案的构建将失效,这意味着 VS 会重建所有内容,尽管未进行任何更改。

例子:

我对 AB 进行了更改。现在我构建 S1,它构建 ABD(到目前为止一切正常)。然后我构建 S2,它构建了 ABC(为什么是 AB 重建?)。现在我再次构建 S1(请注意,自上次构建以来我没有做任何更改),这再次构建了 ABD

为什么VS每次都要重建那些项目?

所有项目均使用 C++ 17 编写,Visual Studio 版本为 15.9.10(截至今天的最新版本,03/28/19)。

最佳答案

有几个原因:

  1. 默认情况下,构建项目会将目标文件和最终二进制文件输出到引用该项目的解决方案的子目录中。所以解决方案 1 和解决方案 2 每个都有自己的 A.lib 和 B.lib 拷贝以及所有目标文件的拷贝来制作这些库。如果您为解决方案 1 重建项目,那么该目录树中的拷贝将具有更新的库,但解决方案 2 的树不会——它必须重新构建它。

    您可能会弄乱一堆项目和解决方案设置以实际共享所有二进制文件,但我不确定这是否值得,或者用于构建的依赖项检查器是否会识别它。

  2. 解决方案 1 和解决方案 2 可能希望使用不同的编译器选项构建共享项目。例如,也许一个使用 MBCS 而另一个使用“Unicode”。如果您尝试共享共享二进制文件,它将无法与需要其他选择的解决方案一起使用。

    您也可以通过为每组选项创建不同的配置/平台组合来解决这个问题。但这没有多大意义,因为只要他们使用不同的选项,无论如何都必须重新构建。

当您跨解决方案共享项目时,您只是在共享源代码。每个解决方案基本上都有一个(可能是唯一的)所有项目设置的拷贝。

我在多个解决方案之间共享很多项目,当我在这些解决方案之间切换时,我真的不太担心库的重建。

如果 C 和 D 密切相关,那么您可能只需要一个解决方案。 (一个解决方案当然可以有许多生成可执行文件的项目。您可以在调试时快速轻松地更改要启动的项目。)然后您会发现每个库只重建一次,但更改一个库也会导致两个可执行文件都是重建。

关于c++ - Visual Studio 无故重新编译在两个解决方案之间共享的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55403623/

相关文章:

c++ - MSVC 和 boost::lambda::bind 错误:T0:不允许标准参数

c++ - Objective-C++ 调用 C 或 C++ 函数

javascript - 为 Windows 8 和 10 创建单一版本

Visual Studio Enterprise 2017 安装程序中不存在 Python 开发选项

c++ - 单独输入线程上的 OpenGL 无效操作错误

c++ - 是否有用于使用 gcc 构建 MS Visual C++ Express 的免费开源工具?

c++ - GCC 值得在 Windows 上使用来代替 MSVC?

c++ - 类型衰减——它是什么以及为什么会存在?

c++ - 对象的第二个实例无法正常工作

c++ - 从 VS2003 到 VS2005 的转换问题?