C/C++开发人员肯定都知道.c .cpp 源文件才应该被编译、链接。
这次就遇到了奇葩的问题:
开发环境:VS2017
错误提示:命令行 warning D9024: 无法识别的源文件类型“..\**interface.h”,假定为对象文件。
看到这个报错,一开始也是迷糊了,这有两层含义:
1. 找不到“..\**interface.h”;
2. “..\**interface.h” 被认为是源文件类型。
第一层含义是容易被发现的,于是查找文件是否存在,存在;再看看include path能找到吗,IDE并没有提示文件不存在。
在没有理解到第二层含义时,就会开始怀疑人生了。
IDE用多了,编译过程都被隐藏起来,编译日志都简化得赏心悦目,让开发人员越来越“傻”。
各种求索无解后,静下心来思考,想知道VS都用什么选项编译的,需要详细的日志。查看选项设置没找到相关设置(如果有知道的请赐教)。我采用的办法是命令行编译:
BuildConsole.exe myexample.sln /CFG="Debug|Win32" /BUILD /PRJ="social"
查看编译过程,日志显示cpp编译过程中居然有一个*interface.h。这日志让我意识到了之前提示的第二层含义。根据以往的经验,猜测是不是工程文件有问题,因为project文件决定工程的属性和行为。
果不其然:
<ItemGroup>
<ClCompile>**.cpp</ClCompile>
...
</ItemGroup>
<ItemGroup>
<ClCompile>**interface.h</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude>**.h</ClInclude>
...
</ItemGroup>
ClCompile **interface.h 告诉IDE,这个文件是源文件,要编它。。。
问题分析清楚了,解决起来就简单了,ClInclude **interface.h