c++ visual studio社区2022在调试之前不生成文件

brtdzjyr  于 2022-12-20  发布在  其他
关注(0)|答案(2)|浏览(183)

最近我清理了我的电脑,重新安装了visual studio community 2022,在重新安装之前,每当我对我的项目做了一些修改,我都会按F5键进入调试,它会在进入调试模式之前构建所有的文件。

为了说明这一点,我可以每次通过按ctrl+F7手动构建文件,但这只是一个变通办法。

现在,在进行更改并按F5键之后,它将忽略这些更改并运行最后一次构建。
我检查了设置,并确保一切与我在第二台机器上的另一个安装相匹配。
我发现了这篇文章the source file is different from when the module was built,并检查了所有建议的解决方案-没有任何帮助。
我试着创建一个新项目,以为可能是项目配置出了问题...没有结果。
如果你想重新创建这个行为,创建一个新的C++项目和2个文件(main.cpp,module.cpp)。下面是我使用的代码(如果你认为代码本身导致了这个问题,请注意):

主.cpp

#include <iostream>
using namespace std;

#include "module.cpp"

int main()
{
    handler h;

    h.func1();

    return 0;
}

模块.cpp

#include <iostream>
using namespace std;

class handler
{
public:
    void func1()
    {
        cout << "idk" << endl;  // change this line
    }
};

尝试调试此安装程序,第一次它将生成所有新文件。然后更改标记行,并再次调试(不手动生成)。
在main.cpp中放置一个断点,然后进入func 1(),要么可以顺利工作,要么会导致我所描述的行为。
如果有人需要,这里有屏幕截图。open file popupsource not found tab

zz2j4svz

zz2j4svz1#

可能原因1

我认为这是因为您的文件module.cpp被VS(Visual studio)视为文本文件而不是源文件,因此VS不会在更改后重新构建您的项目。
如果它是源文件,则在YourProject.vcxproj中应被称为:

<ItemGroup>
    <ClCompile Include="module.cpp" />
  </ItemGroup>

因此,为了干净地添加新的源文件,您需要使用VS的内置“add class”(shift+alt+c)并使用这些文件。
在您的情况下,您可以通过编辑VCXPROJ文件来修复项目,如我的示例所示。

可能原因2

直接包含cpp文件可能会有问题:cpp被编译(如在项目文件中引用的),包含它将复制它的内容,如果它被包含超过一次,则会导致二进制文件中的重复,因此您不能多次使用它(但您可以包含.h多次,.cpp被编译一次)!因此,一般来说,坚持.h和.cpp对规范。
相反,您希望有一个. h.cpp对,并将声明放在.h中,将代码放在其中任何一个中,然后将.h包含在主源代码中。

<ItemGroup>
    <ClCompile Include="module.cpp" />
    <ClCompile Include="main.cpp" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="module.h" />
  </ItemGroup>

在这种情况下,当我请求调试(F5)时,二进制文件在源代码更新时更新。
模块h:

#pragma once
#include <iostream>
using namespace std;

class module
{
public:
    void func1()
    {
        cout << "Now it works !" << endl;  // change this line
    }
};

module.cpp:

#include "module.h"
dgiusagp

dgiusagp2#

这是有选择的(当然!)
您需要菜单-〉工具-〉选项-〉项目和解决方案-〉生成并运行,然后从“运行时,当项目过期时”下拉列表中选择“提示生成”。
相关屏幕截图:

相关问题