【譯】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)/。

設置完畢后,編譯階段輸出路徑將會把源文件路徑考慮進去而不是只考慮源文件名。

祝你順利!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM