2010-12-20 19 views
24

構建代碼時出現以下錯誤。

C:\ Program Files文件 (86)\的MSBuild \ Microsoft.Cpp \ V4.0 \ Microsoft.CppBuild.targets(990,5): 警告MSB8012: TARGETPATH(E:\學習\ FWIF \ demola \ ext-libs \ libcommoncpp2-1.6.0 \ w32 \ Debug \ ccgnu2.dll) 與鏈接器的OutputFile屬性值 g \ CapeCommon14.dll不匹配。這可能會導致您的項目構建不正確。 要解決此問題,請確保$(OutDir),$(TargetName)和 $(TargetExt)屬性值與 %(Link.OutputFile)中指定的值匹配。

我希望有人知道該怎麼做。

+0

是你能夠找到一個解決方案? – Brown 2013-10-09 19:08:20

回答

22

您是否將項目從以前的版本升級到Visual Studio 2010?如果是這樣,這是一個衆所周知的問題。

Visual Studio 2010中C++項目升級過程中升級指南 http://blogs.msdn.com/b/vcblog/archive/2010/03/02/visual-studio-2010-c-project-upgrade-guide.aspx

警告

以下是一些您轉換過程中可能遇到的常見的警告:

1)連接器輸出目錄

您在升級應用程序時可能會看到的警告之一是MSB8012:$(TargetPath)和L着墨的OUTPUTFILE屬性值不匹配:

  • MSB8012:$(TargetExt)(」 .dll文件 ')不匹配鏈接的OUTPUTFILE屬性值 'C:\富\調試\ MFCActiveX.ocx'('。 ocx')在項目配置'Debug | Win32'中。這可能會導致您的項目構建不正確。要解決此問題,請確保$(TargetExt)屬性值與%(Link.OutputFile)中指定的值匹配。 ('C:\ foo \ Debug \ MFCActiveX.dll')不匹配鏈接器的OutputFile屬性值'C:\ foo \ Debug \ MFCActiveX.ocx'('C:\ foo \ Debug \ MFCActiveX.ocx')。 foo \ Debug \ MFCActiveX.ocx')在項目配置'Debug | Win32'中。這可能會導致您的項目構建不正確。要解決此問題,請確保$(TargetPath)屬性值與%(Link.OutputFile)中指定的值匹配。

    Link.OutputFile是在屬性頁面上鍊接器 - >常規 - >輸出文件中定義的值。默認情況下,它的值是$(OutDir)$(TargetName)$(TargetExt),它與$(TargetPath)的值相同。然而,當我們從以前的版本轉換應用程序時,沒有一種簡單的轉換方法來解析Link.OutputFile來確定$(TargetName)和$(TargetExt)的值是什麼,因爲不同的客戶可能已經格式化他們以不同的方式。爲了解決這個問題,我們決定在轉換過程中保留Linker.OutputFile的值。轉換後,$(TargetName)將默認爲$(ProjectName)。 $(TargetExt)將默認爲應用程序類型的默認擴展名:動態庫的.dll,靜態庫的.lib以及應用程序的.exe。 Link.OutputFile值將被保留。如果Link.OutputFile和$(TargetPath)不相同,警告MSB8012將在轉換日誌中發出。構建應用程序時,您將得到相同的警告。

    $(OutDir),$(TargetName)和$(TargetExt)在「常規」屬性頁面上分別顯示爲「輸出目錄」,「目標名稱」,「目標擴展名」。您可以手動更改這些屬性的值,以便不再收到警告。

  • 如果您的項目生成導入庫(鏈接器 - >高級 - >導入庫),如果鏈接器輸出目錄不是默認輸出目錄,則可能還需要在轉換後更改導入庫的輸出文件夾。否則,生成的導入庫可能位於與鏈接器輸出不同的目錄中。

  • 轉換後Debugging.Command被設置爲默認$(TargetPath)。您可能需要進行更改,以便在F5(調試)或Ctrl + F5(未調試時啓動)時啓動正確的可執行文件。

4

同樣的問題也發生在我調試的DLL,我想有在基名尾隨「d」。例如,foo.dll(發佈)但fooD.dll(調試)。在調試配置的鏈接器設置中優化輸出名稱時,會發生醜陋的MSB8012警告。

與2010視覺工作室作品唯一的解決辦法似乎是一個Postbuild-事件的調試配置:

@echo off 
echo Copying $(OutDir)$(TargetName)$(TargetExt) as $(TargetName)D$(TargetExt) 
copy /Y $(OutDir)$(TargetName)$(TargetExt) $(OutDir)$(TargetName)D$(TargetExt) 
+18

將鏈接器 - >常規 - >輸出文件更改爲「$(OutDir)$(TargetName)$(TargetExt)」。並將常規 - >目標名稱設置爲「$(ProjectName)D」 – 2012-10-07 19:24:53

1

我從舊項目轉換爲VS 2010

後得到了同樣的錯誤

爲了解決這個問題,我創建了相同類型的空項目(例如.dll,.lib,.exe)。
然後我複製的項目化子性質的默認值我的項目輸出目錄,中級目錄和輸出文件

4

參見這裏Stackoverflow MSB8012。 將VS2008 C++項目轉換爲VS2012時,對我有用:右鍵單擊解決方案資源管理器中的項目,選擇屬性,彈出:配置屬性,鏈接器,常規。選擇右側的輸出文件,這會給出一個下拉列表,從父項目或項目默認值中選擇固有的。點擊應用。這給出了默認的鏈接器設置:$(OutDir)$(TargetName)$(TargetExt)。重新構建項目,警告不應再出現。

+1

與Andreas Spindler的答案Nathan Moinvaziri的評論相同:將鏈接器 - >常規 - >輸出文件更改爲「$(OutDir)$(TargetName)$(TargetExt )」。並將常規 - >目標名稱設置爲「$(ProjectName)D」 – 2015-08-31 02:40:03

+0

@NickWestgate嘿尼克;-)確認適用於MSVC 2010. – Michaelangel007 2015-09-01 05:55:52

2

我有我的可執行文件名稱不同於項目名稱的場景,我希望它將可執行文件/ dll構建到與項目所在位置不同的位置。

1)更改默認項目名稱是不同的。 通用>的TargetName
<我的可執行文件名稱>

2)輸出到不同的位置,我想可執行打造。 General-> OutputDirectory <我的新位置在這裏>

3)更新鏈接器設置。 連接器 - >常規 新價值:$(OUTDIR)$(的TargetName)$(TargetExt)
這需要新設置1和2

+0

這似乎不回答OP的問題。 – 2015-12-16 21:21:31

+1

其實步驟3)爲我解決了這個問題。 – DanielV 2016-04-01 11:15:07

相關問題