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

时间:2018-08-20 12:52:50

标签: c++ visual-studio visual-studio-2015 linkage vcxproj

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

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

vcxproj文件ClCompile ItemGroup:

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

总而言之,这里存在链接库所需的内容,但是链接错误仍然存​​在。

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

cpp file compilation not possible

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

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

1 个答案:

答案 0 :(得分:1)

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

VS 2017不再需要此功能,但如果不遵守它,VS 2015可能会造成这种混乱。

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

希望这也可以帮助其他人。