VisualStudio需要为每次更改重建解决方案 我目前正在C++中开发游戏引擎。随着我对项目的进一步深入,我注意到生成的可执行文件通常不会反映最新的代码更改。但彻底清理解决方案并重新构建解决方案,解决了问题。不幸的是,对于更大的代码库来说,完全重建不再是可行的选择

VisualStudio需要为每次更改重建解决方案 我目前正在C++中开发游戏引擎。随着我对项目的进一步深入,我注意到生成的可执行文件通常不会反映最新的代码更改。但彻底清理解决方案并重新构建解决方案,解决了问题。不幸的是,对于更大的代码库来说,完全重建不再是可行的选择,c++,visual-studio,opengl,visual-studio-2017,glfw,C++,Visual Studio,Opengl,Visual Studio 2017,Glfw,我已经检查了stackoverflow的不同解决方案: 我已检查我的“构建并运行”设置是否设置为“始终” 建造” 配置管理器也设置为“构建” 其他信息: 它是一个OpenGL项目,使用c语言编写GLFW和glad++ 我使用Visual Studio Community 2017版本15.2 这是一个非常恼人的问题,会导致大量的生产力损失,因为每次我想看到更改时,都必须完全重建整个解决方案。如有任何意见,我将不胜感激。请询问是否需要更多信息 我不知道这是否有任何关联,但这是我在对Test

我已经检查了stackoverflow的不同解决方案:

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

  • 它是一个
    OpenGL
    项目,使用c语言编写
    GLFW
    glad
    ++
  • 我使用Visual Studio Community 2017版本15.2
这是一个非常恼人的问题,会导致大量的生产力损失,因为每次我想看到更改时,都必须完全重建整个解决方案。如有任何意见,我将不胜感激。请询问是否需要更多信息

我不知道这是否有任何关联,但这是我在对TestScene.cpp进行一个小更改并重新运行代码时得到的结果:


更新

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

  • 我有一个类,可以旋转一个对象
  • 我已将转速设置为1
  • 对象按预期旋转
  • 现在我将速度浮点值从1更改为0
  • 我按run(本地Windows调试器)
  • 这是输出日志:
  • 1> ----构建已启动:项目:星型引擎,配置:调试x64------

    1> TransformerScript.cpp

    1> c:\users\haeri\documents\github\space engine\star engine\src\header\matrix4f.h(44):警告C4267:“参数”:从“大小”转换为“无符号整数”,可能会丢失数据

    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:“参数”:从“大小”转换为“无符号整数”,可能会丢失数据

    1> c:\users\haeri\documents\github\space engine\star engine\src\source\transformerscript.cpp(13):警告C4244:“参数”:从“double”转换为“float”,可能会丢失数据

    1> 编译

    1> 正在生成代码

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

    1> TestScene.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\u 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> 完成建设项目“星引擎.vcxproj”

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

  • 编译后的可执行文件将启动
  • 结果是相同的图形以相同的速度旋转
  • 预期行为:无旋转,因为浮动设置为0
  • 我被迫“清洁解决方案”和“重建解决方案”
  • 这在我的笔记本电脑上大约需要1到2分钟
  • VS完成重建新解决方案
  • 我按run(本地Windows调试器)
  • 物体没有移动。(这与预期一样)
  • 替代方法

  • 在速度浮动值的位置设置断点
  • 我按run(本地Windows调试器)
  • 有时(90%的情况下)会弹出错误提示。其他时候(10%的情况下),一切正常
  • 我按ok
  • 编译后的可执行文件将启动
  • 结果是相同的图形以相同的速度旋转
  • 预期行为:无旋转,因为浮动设置为0
  • 断点未触发
    如果更改位于头文件中,我认为您需要完全重新生成以反映更改

    我的一个C#项目也遇到了同样的问题,我这样解决了它:

  • 转到解决方案>属性
  • 检查配置属性>配置
  • 在我的例子中,没有为解决方案中的一个项目检查构建标志

  • 你有多个项目还是只有一个?在第一种情况下:听起来项目相互依赖,但您没有告诉解决方案这些依赖关系是什么,所以它只是按照任何顺序构建它们,而不是按照正确的顺序(对您来说)。@stijn我只有一个项目。我有一个用于静态libs的外部文件夹,但这些文件夹是在visualstudios的解决方案设置中指定的。如果您有一个项目,您可以更改属于该项目的代码(不在外部libs中),您只需“构建”即可构建可执行文件(如中所示,您可以在输出日志中看到再次编译已更改的源文件,以及链接器创建新的可执行文件并将其复制到您运行该文件的位置),但该可执行文件不包含最新的更改?可能是增量链接中的错误或其他错误(您是否使用它?关闭它以进行检查),但如果没有复制它的实际项目/代码,就很难说了:这绝对不是VS@stijn的开箱即用行为。你说的一些东西超出了我的理解,但听起来是对的。我在代码中做了一些小改动(例如:更改对象的位置)。然后我点击run(本地Windows调试器)和对象