Visual Studio 需要为每次更改重建解决方案

Hae*_*eri 5 c++ opengl glfw visual-studio visual-studio-2017

我目前正在使用 C++ 开发游戏引擎。随着我进一步深入该项目,我注意到生成的可执行文件通常不反映最新的代码更改。但完全清理解决方案并重建它可以解决问题。不幸的是,对于更大的代码库来说,完全重建不再是一个可行的选择。

我已经在 stackoverflow 上检查过不同的解决方案:

  • 我已检查我的“构建并运行”设置是否设置为“始终构建”
  • 配置管理器也设置为“构建”

附加信息:

  • 这是一个用C++ 编写的OpenGL项目GLFWglad
  • 我使用 Visual Studio Community 2017 版本 15.2

这是一个非常烦人的问题,会导致大量生产力损失,因为每次我想看到更改时都必须完全重建整个解决方案。如果有任何意见,我将不胜感激。请询问是否需要更多信息。

我不知道这是否有任何相关性,但这是我对 TestScene.cpp 进行小更改并重新运行代码时得到的结果: 在此输入图像描述


更新

以下是对该问题的深入解释:

  1. 我有一个允许旋转对象TransformerScript.cpp 的类
  2. 我把旋转速度设置为1。
  3. 对象按预期旋转。

在此输入图像描述

  1. 现在我将速度浮点值从 1 更改为 0。
  2. 我按运行(本地 Windows 调试器)
  3. 这是输出日志:

1>------ 构建开始:项目:Star-Engine,配置:调试 x64 ------

1>TransformerScript.cpp

1>c:\users\haeri\documents\github\space-engine\star-engine\src\header\matrix4f.h(44): 警告 C4267: 'argument': 从 'size_t' 到 'unsigned int' 的转换,可能丢失数据

1>c:\users\haeri\documents\github\space-engine\star-engine\src\header\matrix4f.h(44): 警告 C4244: '初始化': 从 'float' 到 'int' 的转换,可能数据丢失

1>c:\users\haeri\documents\github\space-engine\star-engine\src\header\matrix4f.h(45): 警告 C4267: 'argument': 从 'size_t' 到 'unsigned int' 的转换,可能丢失数据

1>c:\users\haeri\documents\github\space-engine\star-engine\src\source\transformerscript.cpp(13): 警告 C4244: 'argument': 从 'double' 到 'float' 的转换,可能数据丢失

1>编译...

1>生成代码...

1>正在跳过...(未检测到相关更改)

1>测试场景.cpp

1>Star-Engine.vcxproj -> C:\Users\haeri\Documents\github\Space-Engine\x64\Debug\Star-Engine.exe

c:\users\haeri\documents\github\space-engine\star-engine\src\source\glad.c(51): 警告 C6308: 'realloc' 可能返回空指针:将空指针分配给 'exts_i',其中作为参数传递给“realloc”,将导致原始内存块泄漏。

c:\users\haeri\documents\github\space-engine\star-engine\include\stb\stb_image.h(3667):警告 C6001:使用未初始化的内存“coutput”。

1>Star-Engine.vcxproj -> C:\Users\haeri\Documents\github\Space-Engine\x64\Debug\Star-Engine.pdb(部分 PDB)

1>完成构建项目“Star-Engine.vcxproj”。

========== 构建:1 成功,0 失败,0 最新,0 跳过 ==========

  1. 编译后的可执行文件启动
  2. 结果是同一个图形以相同的速度旋转。
  3. 预期行为:无旋转,因为浮点数设置为 0。
  4. 我被迫“清理解决方案”和“重建解决方案”
  5. 在我的笔记本电脑上,这大约需要 1 到 2 分钟
  6. VS完成重建新解决方案
  7. 我按运行(本地 Windows 调试器)
  8. 物体没有移动。(这正如预期的那样)

替代方法

  1. 在速度浮点值位置设置断点
  2. 我按运行(本地 Windows 调试器)
  3. 有时(90%的情况)会弹出错误提示。其他时候(10% 的情况)一切都按预期进行

在此输入图像描述

  1. 我按确定
  2. 编译后的可执行文件启动
  3. 结果是同一个图形以相同的速度旋转。
  4. 预期行为:无旋转,因为浮点数设置为 0。
  5. 断点没有被触发!

小智 3

我的一个 C# 项目也遇到了同样的问题,并按如下方式解决:

  1. 转到解决方案 > 属性
  2. 检查配置属性 > 配置
  3. 就我而言,解决方案中的一个项目未检查“构建”标志