.h为什么会被编译链接?

        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

       

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值