【译】MSB8027: Two or more files with the name of ***.cpp will produce outputs to the same location.

初稿链接:http://www.setoreaustralia.com/msb8027-two-or-more-files-with-the-name-of-texture-cpp-will-produce-outputs-to-the-same-location/

又一个在VC++环境下展开支付工作的“乐趣”。即便看起来没有什么能导致问题,但一贯移植一些*nix代码从不会全面运行。在移植一个AR系统(spatial
augmented reality
system)时,大家有六个Texture.cpp(一个对准实际环境纹理,另一个对准虚拟目的纹理)分别位居不同的子目录中,然则VC++编译器却不太喜欢接受这种状况:

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppBuild.targets(942,5): warning MSB8027: Two or more files with the name of Texture.cpp will produce outputs to the same location. This can lead to an incorrect build result.  The files involved are src\geometry\Texture.cpp, src\graphics\Texture.cpp.

次第会持续编译,但说到底总能在富含错误文件或者访问错误类时产生错误!

其实那一个早已不是如何新Bug了,在底下这多少个Microsoft
Connect给出的时间线中就有那么些题目,并且原本计划是在Visual Studio 2013
Update 1就该拿到缓解(我后天在用Update
3但是并没有解决!):https://connect.microsoft.com/VisualStudio/feedback/details/797460/incorrect-warning-msb8027-reported-for-files-excluded-from-build

化解措施

VC++编译源文件时默认全体出口(对象文件)到同一个目录下,境遇同名源文件覆盖前边的同名对象文件。为了化解这几个问题,你可以安装输出路径与源文件路径类似。以下操作在Visual
Studio 2013 (Update 3)下适用:

右键项目->属性->配置属性->C/C++->输出文件->对象文件名,将$(IntDir)改为$(IntDir)/%(RelativeDir)/。

设置完毕后,编译阶段输出路径将会把源文件路径考虑进去而不是只考虑源文件名。

祝你顺利!