当前位置:项目开发->项目经验 ->VS2017编译警告MSB8027解决办法

原创版权标志VS2017编译警告MSB8027解决办法

作者:codexia  发表时间:2018/4/13 16:28:07  阅读:
[摘要] 当在编译的时候,VS2017发出警告MSB8027,意思是输出的目录相同,导致多个相同的文件生成的中间文件会相互覆盖,从而导致错误。
使用支付宝扫码领红包,余额宝付款才可以使用红包哦!不要忘记哈。每天扫一次,天天赚红包!!可以将二维码保存到手机,每天直接扫码领红包啦!!
    当你在一个项目里,两个不同的文件夹里,创建了相同的文件,在VS2017里显示为两个不同的目录,在文件夹里也确实在不同的文件夹里。但是当在编译的时候,VS2017发出警告MSB8027,意思是输出的目录相同,导致多个相同的文件生成的中间文件会相互覆盖,从而导致错误。
    那么这个问题如何解决呢?是改文件名吗?当然,改文件名是可以解决的,因为这样让每一个代码文件都有不一样的文件名,就不存在覆盖的问题。
    但是这个并不是最好的解决办法,因为你通过了目录结构来区分代码文件,尽管两个代码文件相同,但是因为路径不同,是可以区分开的。所以改名字是可以解决,但是不是最优雅的方式。
    解决的办法其实也很简单,但是我们需要明白其中的道理。其实编译默认的输出都是将中间文件放在一个目录,所以才会让多个相同文件名的中间文件重叠了,产生了覆盖。那么VS2017既然作为一个工具,相当强大的一个工具,绝对不会弱智到固定输出目录的。所以我们需要在VS2017的项目属性设置里下手。

        我们打开项目属性页,找到[C/C++ --> 常规 --> 对象文件名],默认的值就是输出的中间文件的命名规则。默认的命名规则是【$(IntDir)%(filename).o】,这个表名输出的名字就在默认的初始目录下,名字就是源文件名称,再加一个后缀。如下图所示:

    VS2017编译警告MSB8027解决办法

    我们现在设置的是多个不同的目录,目录下有同名的代码文件,按照这个规则,默认的中间文件目录是一样的,再看文件名,也是一样的,最后肯定是重叠了。要避免这种情况,我们只需要在这个命名规则上加上目录即可。
    加入相对路径的方法也就是在默认的目录和文件名中间加入相对路径的变量,这样就可以按照目录来输出中间文件,就不会重叠了。命名规则修改为下面这样:
$(IntDir)/%(RelativeDir)/%(filename).o
    然后确定即可。再编译的时候就没有MSB8027警告了。
微信扫码关注公众号CPP技术网,微信号cpp_coder,关注我们的公众号,阅读更多精彩内容!每天还可以领取大红包哦!!!每天还可以领取大红包哦!!!每天还可以领取大红包哦!!!
文章来源:C++技术网原创文章版权为网站和作者共同所有,会员文章禁止转载。非会员文章转载做好本文超链接即表示授权转载。通过文章下面的分享按钮可以自由分享所有文章。

返回顶部

在线提问
问题标题:
问题描述:(简陋的描述会导致问题被最后回答、没有针对性回答甚至无法解答。请确保问题描述的足够清楚。)