Visual Studio 2019在头文件更改时没有构建所有的cpp文件

3

我一直在试图弄清楚为什么Visual Studio没有重新编译我的库项目中所有受头文件更改影响的编译单元。

假设我有以下头文件TestA.h

class TestA
{
    public:
    int GetNumber() { return 0 };

    std::string GetString(); // implemented in TestA.cpp

}

假设我有三个.cpp文件,分别为TestA.cpp、TestB.cpp和TestC.cpp。
TestA.cpp仅包含TestA函数的实现。
然而,TestB.cpp和TestC.cpp都遵循下列格式:
#include "TestA.h"

....

TestA* aObject = new TestA();

int aNumber = aObject->GetNumber();

...

这就是问题所在,如果我将TestA.h中的函数GetNumber更改为GetNumber1,Visual Studio和MSBuild命令行将只构建TestA.cpp,并成功编译。然后它将使用现在过时的.obj文件生成.lib文件。但是,如果我重新构建,则会出现我预期的错误。我尝试启用/禁用增量链接、最小重建、托管增量构建,但都没有解决问题。 我可以通过删除中间目录中的.obj和.tlog文件来实现所需的行为。 感谢帮助。 谢谢 Sumeth

我几年前提出了这个问题,但是我没有得到令人满意的答案。https://stackoverflow.com/questions/12982025/how-do-i-make-sure-that-when-a-h-file-is-modified-the-cc-files-including-it-a. - R Sahu
1个回答

4

在尝试了所有想到的方法后,我决定尝试重新创建该项目。这样做解决了问题!虽然不确定发生了什么,但删除所有vcxproj文件并从头开始创建vcxproj似乎解决了我的问题。不确定具体发生了什么变化,但那似乎解决了问题。


您可以在您的答案下方点击 请参考此按钮 - Mr Qian
1
我遇到了完全相同的问题。根据你的答案,我查看了.vcxproj文件并找到了问题所在。.cpp文件未被包含在编译中(使用<ClInclude Include="MyFile.cpp" />)。由于某种奇怪的原因,它被包含为非代码文件(使用<None Include="IFilter.h" />)。我将“None”替换为“ClInclude”,然后它就可以工作了。重新创建.vcxproj文件实际上做了同样的事情。 - Thomas Barnekow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接