我单击“生成”按钮后,Visual Studio 2019始终重建所有内容

时间:2019-07-28 23:07:28

标签: c++ visual-studio

我是Visual Studio的新手。现在我正在使用Visual Studio 2019开发Clang&LLVM。我发现,每次我右键单击解决方案资源管理器中的clang可执行文件并选择“构建”或“调试->启动新实例”时,VS都会从头开始重新构建所有内容,尽管我没有更改任何源文件。由于LLVM是一个巨大的项目,因此重新编译花费的时间太长。

有什么解决方案可以使VS更智能,使其仅重新编译必需的文件(文件进行了更改及其依赖项)?

3 个答案:

答案 0 :(得分:0)

如果存在带有“始终复制”(“复制到输出目录”选项)的文件,则可能会发生这种情况

修复:将其更改为“如果更新则复制”

enter image description here

通过在文本编辑器中检查csproj文件,可以轻松找到这些文件。

答案 1 :(得分:0)

在我的情况下,当项目使用标志/ MP编译并具有“预编译头”时,在特定情况下会发生此问题。

在上述情况下,编译应用程序时会创建文件“ Microsoft.Build.CPPTasks.CL.read.1.tlog”,但不幸的是包含临时文件的路径,例如

“ \?\ C:_Sources \ MyApp \ OBJ \ DEBUG \ X64 \ MyApp \ stdafxD-8811C005.PCH.TMP \?\ C:_Sources \ MyApp \ OBJ \ DEBUG \ X64 \ MyApp \ PCH-92DA10DF.OBJ.TMP“

再次运行编译时,将检查文件中的每个条目是否有任何更改,因为我们有不存在的文件入口点,所以编译器必须再次对其进行编译,我们可以看到“丢失”文件是预编译的标头,因此必须重新编译整个应用程序

目前,我找到了针对此问题的3种解决方案:

  1. 请勿使用标志/ MP
  2. 使用其他构建系统,例如忍者,fastbuild等。
  3. 编写简单的应用程序以从所有* .tlog文件中删除临时条目 并在每次构建之前运行它

解决方案3的c#示例代码。

predicate1(Code,Percent)
:-
values1(Code,_,Amount) ,
Amount > 1000 ,
values2(Code,Percent)
.

答案 2 :(得分:0)

如果将诊断设置为 Tools->Options->Projects and Solutions->Build and Run->MSBuild project build output verbosity = Diagnostic,则可以在输出中找到重新编译的来源。

就我而言,这是因为它们是在安装新计算机后首次构建的。我从 svn 检出文件,但后来我更改了计算机日期和时间,因为它不正确。更改后所有先前检查的文件都有未来的日期,因此发生了重新编译。为了解决问题,我删除了所有来源并从 svn 再次签出。