VS2017编译警告MSB8027解决办法

4859 人浏览 | 时间: 2018-04-13 16:28:07 | 作者: codexia

    当你在一个项目里,两个不同的文件夹里,创建了相同的文件,在VS2017里显示为两个不同的目录,在文件夹里也确实在不同的文件夹里。但是当在编译的时候,VS2017发出警告MSB8027,意思是输出的目录相同,导致多个相同的文件生成的中间文件会相互覆盖,从而导致错误。
    那么这个问题如何解决呢?是改文件名吗?当然,改文件名是可以解决的,因为这样让每一个代码文件都有不一样的文件名,就不存在覆盖的问题。
    但是这个并不是最好的解决办法,因为你通过了目录结构来区分代码文件,尽管两个代码文件相同,但是因为路径不同,是可以区分开的。所以改名字是可以解决,但是不是最优雅的方式。
    解决的办法其实也很简单,但是我们需要明白其中的道理。其实编译默认的输出都是将中间文件放在一个目录,所以才会让多个相同文件名的中间文件重叠了,产生了覆盖。那么VS2017既然作为一个工具,相当强大的一个工具,绝对不会弱智到固定输出目录的。所以我们需要在VS2017的项目属性设置里下手。

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

    我们现在设置的是多个不同的目录,目录下有同名的代码文件,按照这个规则,默认的中间文件目录是一样的,再看文件名,也是一样的,最后肯定是重叠了。要避免这种情况,我们只需要在这个命名规则上加上目录即可。
    加入相对路径的方法也就是在默认的目录和文件名中间加入相对路径的变量,这样就可以按照目录来输出中间文件,就不会重叠了。命名规则修改为下面这样:
$(IntDir)/%(RelativeDir)/%(filename).o
    然后确定即可。再编译的时候就没有MSB8027警告了。
请微信扫码阅读
为防止恶意爬虫,
已开启反爬机制

相关阅读