Visual Studio 单个cpp文件的编译选项变灰

Visual Studio compile option is grayed out for a single cpp file

有人要求我帮助一位同事解决一个通用解决方案中某个项目中的神秘构建错误。构建错误发生在 linkage 阶段,在静态库 (a.lib) 中定义的 class 构造函数在库 (b.lib) 中使用时找不到其中包括 a.lib。经过仔细调查,我发现:

  1. class 中正确定义了构造函数。
  2. class 在属于该项目的 cpp 文件中定义。
  3. 如果尝试使用智能感知导航到 cpp 文件或 class 构造函数,一切都会按预期进行。

vcxproj 文件 ClCompile 项目组:

...
<ClCompile Include="Source\CMYKOVBLab.cpp" />
<ClInclude Include="Source\CMYKOBGLab.cpp" />  <--- The file is here.
<ClCompile Include="Source\CMYKOVBRGB.cpp" />
...

总而言之,link 库所需的内容已经存在,但 linkage 错误仍然存​​在。

我注意到一件奇怪的事情是,无法通过按 Ctrl-F7 或 a.lib 中的右键来编译未找到 class 构造函数的 cpp。该选项显示为灰色,但仅适用于该特定文件。此外,当我在应该编译该文件的地方构建 a.lib 库时,它不是,因此没有创建目标文件。

可能是什么原因?我该如何解决?

我正在使用 Visual Studio Professional 2015 Update 3.

在 VS 2015 中,.vcxproj 项目文件中定义的编译包含文件应按字典顺序排列。

VS 2017 不再需要它,但如果不尊重它,VS 2015 就会造成这种混乱。

您的同事已手动修改 .vcxproj 项目文件以包含该文件,但他不遵守字典顺序。您只需从项目中删除该文件,然后再次将其添加回来。 Visual Studio 会将其包含在正确的位置,您的构建将会成功。

希望这也能帮助到其他人。