VS2013: MSB8027: Two or more files with the name of ***.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)/。
設置完畢後,編譯階段輸出路徑將會把源文件路徑考慮進去而不是只考慮源文件名。
祝你順利!