日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

Visual Studio 2010中C++项目升级指南

發(fā)布時(shí)間:2023/12/20 c/c++ 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Visual Studio 2010中C++项目升级指南 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

如何升級(jí)?

Visual Studio 2010支持來(lái)自VC6、Visual Studio 2002、Visual Studio 2003、Visual Studio 2005和Visual Studio 2008的升級(jí)。同Visual Studio的早期版本一樣,你可以選擇通過(guò)IDE的轉(zhuǎn)換向?qū)Щ蛘呤敲钚泄ぞ?#xff08;Devenv/upgrade)來(lái)完成升級(jí)。

以下是升級(jí)過(guò)程中的一些建議:

1) 把升級(jí)環(huán)境與構(gòu)建環(huán)境設(shè)置成相同的

升級(jí)過(guò)程中會(huì)嘗試加載一些文件,另外還會(huì)評(píng)估一些值。如果你的項(xiàng)目中所使用的值不是在項(xiàng)目文件中自己定義的,例如在環(huán)境變量中定義的值,那就需要在升級(jí)之前事先設(shè)置好這些環(huán)境變量。如果這些環(huán)境變量設(shè)置不當(dāng),則可能會(huì)因?yàn)闊o(wú)法對(duì)值進(jìn)行評(píng)估而出現(xiàn)警告或錯(cuò)誤。

2)? 在升級(jí)之前確保你已經(jīng)安裝了必要的平臺(tái)

在一臺(tái)沒(méi)有可用平臺(tái)的機(jī)器上對(duì)項(xiàng)目進(jìn)行轉(zhuǎn)換,可能會(huì)導(dǎo)致轉(zhuǎn)換錯(cuò)誤。例如,如果你想在Visual Studio Professional SKU中對(duì)安騰平臺(tái)的一個(gè)項(xiàng)目進(jìn)行轉(zhuǎn)換,由于它不支持安騰平臺(tái),你就會(huì)看到像下面這樣的轉(zhuǎn)換出錯(cuò)信息:

  • Failed to upgrade 'Debug|<Itanium>'. Please make sure you have the corresponding platform?
  • installed under '%vctargetspath%\platforms\Itanium'. Cannot load the project due to a corrupt?
  • project file. The following error has occurred during XML parsing:??
  • File: D:\Sample\ConsoleApp\ConsoleApp.vcproj??
  • Line: 28??
  • Column: 5??
  • Error Message:??
  • System error: -2147154677.??
  • The file 'D:\Sample\ConsoleApp\ConsoleApp.vcproj' has failed to load.
  •   這是因?yàn)檗D(zhuǎn)換過(guò)程需要那些平臺(tái)的屬性值才能成功進(jìn)行。你可以通過(guò)查看以下目錄獲悉已安裝了哪些平臺(tái):%ProgramFiles%\MSBuild\Microsoft.cpp\V4.0\Platforms (或者查看x64平臺(tái)下的 %ProgramFiles(x86)%\MSBuild\Microsoft.cpp\V4.0\Platforms )。

      3) 如果可能的話,使用本地的多定向支持來(lái)對(duì)Visual Studio 2008工具集進(jìn)行構(gòu)建

      在Visual Studio? 2010中,我們新增了本地的多定向支持(Multi-Targeting),通過(guò)使用新的基于MSBuild的項(xiàng)目系統(tǒng),你可以在Visual Studio 2010的IDE中為Visual Studio 2008工具集構(gòu)建目標(biāo)。關(guān)于這一特性,你可以看看這篇博客。我們建議用戶,特別是擁有大型代碼庫(kù)的用戶,在升級(jí)時(shí)先利用這一特性在Visual Studio 2010中構(gòu)建Visual Studio 2008工具集的程序。這樣,當(dāng)你在升級(jí)過(guò)程中碰到問(wèn)題,就可以把那些跟項(xiàng)目系統(tǒng)或構(gòu)建系統(tǒng)相關(guān)的問(wèn)題與工具的問(wèn)題區(qū)別開(kāi)來(lái)。這將會(huì)讓你更加平滑地升級(jí)到Visual Studio 2010 工具集。

      一旦升級(jí)完成,屬性表文件(.Visual Studio props)就會(huì)被轉(zhuǎn)換成新的格式(.props)。同樣,項(xiàng)目文件(.vcproj)也會(huì)被轉(zhuǎn)換為新的格式(.vcxproj)。值得注意的是,新的項(xiàng)目文件會(huì)與舊的項(xiàng)目文件同時(shí)生成。在轉(zhuǎn)換過(guò)程中還產(chǎn)生了一種新的文件類(lèi)型(.filter .vcxproj),該過(guò)濾器文件包含用來(lái)顯示解決方案的資源管理器文件夾信息。該過(guò)濾器信息原本是項(xiàng)目文件的一部分,然而這種變化是必要的,因?yàn)橹灰?xiàng)目文件發(fā)生變化,MSBuild就會(huì)請(qǐng)求重新構(gòu)建。通過(guò)在一個(gè)單獨(dú)的文件中保存過(guò)濾器信息,就可以在避免重新構(gòu)建整個(gè)項(xiàng)目的情況下修改過(guò)濾器。

      注意:升級(jí)過(guò)程不會(huì)轉(zhuǎn)換.user文件。因此,你的調(diào)試和部署設(shè)置在轉(zhuǎn)換后將不會(huì)被保留。

      在Visual Studio 2010中,一個(gè)新的命令行升級(jí)工具 VCUpgrade.exe也被加入了進(jìn)來(lái)。此命令行工具,適合在只有一個(gè)項(xiàng)目的情況下進(jìn)行升級(jí),因?yàn)樗鼰o(wú)法把解決方案文件作為輸入,并將其解析成項(xiàng)目文件。VCUpgrade.exe位于 $(Visual Studio InstallDir)\ common7 \ Tools目錄下,該工具也將附帶在WinSDK的下一個(gè)版本中,這樣用戶就可以在沒(méi)有Visual Studio IDE的情況下用命令行對(duì)WinSDK中的項(xiàng)目文件進(jìn)行升級(jí)。

      升級(jí)過(guò)程中的警告

      以下是轉(zhuǎn)換過(guò)程中,你可能會(huì)遇到的一些常見(jiàn)警告:

      1) 鏈接器輸出目錄

      在升級(jí)時(shí)你可能會(huì)看到的一個(gè)警告是MSB8012:$(TargetPath)和鏈接器的OutputFile屬性的值不匹配:

  • - MSB8012: $(TargetExt) ('.dll') does not match the Linker's OutputFile?
  • property value 'C:\foo\Debug\MFCActiveX.ocx' ('.ocx') in project configuration 'Debug|Win32'.?
  • This may cause your project to build incorrectly. To correct this, please make sure that $(TargetExt)?
  • property value matches the value specified in %(Link.OutputFile).??
  • - MSB8012: $(TargetPath) ('C:\foo\Debug\MFCActiveX.dll') does not match the Linker's OutputFile?
  • property value 'C:\foo\Debug\MFCActiveX.ocx' ('C:\foo\Debug\MFCActiveX.ocx') in project?
  • configuration 'Debug|Win32'. This may cause your project to build incorrectly.?
  • To correct this, please make sure that $(TargetPath) property?
  • value matches the value specified in %(Link.OutputFile).
  •   Link.OutputFile是在屬性頁(yè)中Linker-> General -> Output File 這一項(xiàng)中定義的值。默認(rèn)情況下,它的值是$(OutDir)$(TargetName)$(TargetExt),與$(TargetPath)相同。當(dāng)我們把一個(gè)應(yīng)用程序從之前的版本轉(zhuǎn)換過(guò)來(lái)時(shí),并沒(méi)有辦法可以很好地解析出Link.OutputFile被$(TargetName)和$(TargetExt)的值,因?yàn)椴煌挠脩艨赡苡貌煌姆椒▽?duì)其進(jìn)行了賦值。為了解決這一點(diǎn),我們決定在轉(zhuǎn)換過(guò)程中保留Linker.OutputFile中的值。在轉(zhuǎn)換之后,$(TargetName)將默認(rèn)為$(ProjectName),$(TargetExt)將默認(rèn)為該類(lèi)應(yīng)用程序的默認(rèn)擴(kuò)展名:動(dòng)態(tài)庫(kù)文件為.dll,靜態(tài)庫(kù)為.lib,應(yīng)用程序則為.exe,而Link.OutputFile值則將被保留。如果Link.OutputFile與$(TargetPath)不同,警告MSB8012會(huì)被記錄在轉(zhuǎn)換日志中。在構(gòu)建應(yīng)用程序時(shí)你也會(huì)看到同樣的警告。

      $(OutDir),$(TargetName)和$(TargetExt)在“常規(guī)”屬性頁(yè)中分別對(duì)應(yīng)“Output Directory”,“Target Name”,“Target Extension”。你可以手動(dòng)更改這些屬性的值,這樣你就不會(huì)再看到警告了。

      -如果你的項(xiàng)目生成了導(dǎo)入庫(kù)(Linker -> Advanced -> Import Library),而且鏈接器的輸出目錄不是默認(rèn)目錄,那么你可能還需要更改導(dǎo)入庫(kù)的輸出文件夾。否則,生成的導(dǎo)入庫(kù)所在的目錄就可能會(huì)與鏈接器的輸出不同。

      -調(diào)試。轉(zhuǎn)換后命令被設(shè)為默認(rèn)的$(TargetPath)。你可能需要做一些改動(dòng),這樣當(dāng)按下F5 (Debugging)或 Ctrl + F5 (Start without debugging)之后才能加載正確的可執(zhí)行程序。

    ?

     2) 屬性表的排序

      如果你的應(yīng)用程序有屬性表,那么在轉(zhuǎn)換過(guò)程中你可能會(huì)遇到下面的警告中:

  • - All user macros reported below for configuration 'Debug|Win32' are used before their definition,?
  • which can cause undesirable build results; this is not supported in this release.?
  • You can resolve this by changing the inclusion order????????????
  • of the consuming property sheets and making sure they come after the property sheets defining the user macros.??
  • ??????????? - MSB4211: C:\foo\PropertySheet\foo.props;?
  • The property "MyIncludePath" is being set to a value for the first time,?
  • but it was already consumed at "C:\foo\PropertySheet\bar.props".
  •   該警告歸因于MSBuild對(duì)其屬性的評(píng)估方式:MSBuild按順序依次評(píng)估其屬性值。如果在派生的屬性表中定義的屬性在父屬性表中被使用,那么其值就會(huì)被設(shè)為空。然而,VCBuild采用的是延遲評(píng)估方式。這樣,即使是在派生屬性表中定義的屬性也可以在父屬性表中使用。若要解決此問(wèn)題,請(qǐng)按照警告消息改變屬性表中的順序,從而確保屬性在定義后才被使用。

      升級(jí)后的行為變化

      盡管底層的構(gòu)建系統(tǒng)已經(jīng)發(fā)生了改變,但我們?nèi)员M力讓用戶在遷移到Visual Studio 2010后有相同的使用體驗(yàn)。另外,我們還采取了一些措施來(lái)改進(jìn)構(gòu)建體驗(yàn)或是迎合MSBuild的某些特定要求。因此,一旦你遷移到Visual Studio 2010,就可能就會(huì)注意到以下一些變化。

      1) 從“解決方案依賴”到“項(xiàng)目到項(xiàng)目的引用”

      如果在一個(gè)舊版本Visual Studio版本下進(jìn)行編譯的C++程序被轉(zhuǎn)換到Visual Studio 2010后,解決方案級(jí)定義的項(xiàng)目依賴關(guān)系便會(huì)被轉(zhuǎn)化成項(xiàng)目到項(xiàng)目的引用(project to project references)。這一變化確保了C + +項(xiàng)目依賴關(guān)系能夠在項(xiàng)目文件中被捕獲。下面就是一個(gè)項(xiàng)目到項(xiàng)目的引用在項(xiàng)目文件中的樣子:

  • <ItemGroup>
  • <ProjectReference Include="..\Cpp\Cpp.vcxproj">
  • <Project>{c58574bf-9dd8-4cf8-b5b6-6551f2f3eece}</Project>
  • <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
  • </ProjectReference>
  • </ItemGroup>
  •   在項(xiàng)目文件中存放依賴關(guān)系有幾個(gè)優(yōu)點(diǎn)。首先,用戶可以在不用解決方案的情況下構(gòu)建一個(gè)項(xiàng)目,相關(guān)的項(xiàng)目會(huì)自動(dòng)被構(gòu)建。第二,它為那些擁有巨大的代碼樹(shù)又可能不會(huì)使用解決方案文件的用戶提供了方便。 此外,許多客戶都有好幾個(gè)解決方案文件,每個(gè)文件都包含項(xiàng)目的不同子集。通過(guò)這種方式就可以讓用戶避免為每個(gè)解決方案設(shè)置依賴關(guān)系。另一個(gè)重要因素就是,使用項(xiàng)目到項(xiàng)目的引用使得構(gòu)建過(guò)程更加可靠,尤其是在多核的環(huán)境下。這與Visual Studio早期版本的情況也是一致的。

      -如果某個(gè)C#程序依賴于一個(gè)C++程序,并且這一依賴只使用了解決方案依賴關(guān)系表示,那么現(xiàn)在的這種轉(zhuǎn)換并不會(huì)把解決方案依賴關(guān)系轉(zhuǎn)換成項(xiàng)目到項(xiàng)目的引用。你可能會(huì)碰到因?yàn)椴徽_的構(gòu)建順序而導(dǎo)致的構(gòu)建錯(cuò)誤,尤其是使用命令行直接進(jìn)行MSBuild構(gòu)建的時(shí)候。要解決該問(wèn)題,你得為C#和C++程序手動(dòng)設(shè)置項(xiàng)目到項(xiàng)目的引用。

      -在Visual Studio 2010中設(shè)置新的構(gòu)建依賴關(guān)系時(shí),通常都要用項(xiàng)目到項(xiàng)目的引用替代解決方案依賴。

      2)? 項(xiàng)目到項(xiàng)目引用屬性的變化

      轉(zhuǎn)換后,CopyLocalDependencies和UseDependenciesInBuild屬性會(huì)被去除?!癠se in Build”屬性改為“Reference Assembly Output”,以更好地表示該屬性的作用。另外兩個(gè)屬性:“Link Library Dependencies”和“Use Library Dependency Inputs”增加到了被引用的那個(gè)項(xiàng)目中,以便被引用的項(xiàng)目控制它的輸出是否被傳遞到引用它的那個(gè)項(xiàng)目中。以下是Visual Studio 2008和Visual Studio 2010項(xiàng)目到項(xiàng)目引用屬性的對(duì)比圖。

      -把“Reference Assembly Output”設(shè)為“false”會(huì)允許該項(xiàng)目成為項(xiàng)目到項(xiàng)目引用的一部分,從而設(shè)置構(gòu)建依賴關(guān)系,而它的輸出不會(huì)被傳遞到引用它的那個(gè)項(xiàng)目的CL中。此屬性用于被托管的程序。

      -把“Link Library Dependencies”設(shè)為“false”,會(huì)允許該項(xiàng)目成為項(xiàng)目到項(xiàng)目引用的一部分,從而設(shè)置構(gòu)建依賴關(guān)系,而它的輸出不會(huì)被傳遞到引用它的那個(gè)項(xiàng)目的鏈接器中。

      3)VC + +目錄變化

      Visual Studio 2010不再支持在Tools->Options中設(shè)置VC + +目錄。相反,Visual Studio 2010引入了用戶設(shè)置文件(Microsoft.cpp.<Platform>.users.props)以控制包括全局搜索路徑在內(nèi)的全局設(shè)置。這些文件位于$(USERPROFILE)\appdata\local\microsoft\msbuild\v4.0目錄。當(dāng)遷移到Visual Studio 2010后,Visual Studio 2005或Visual Studio 2008的目錄設(shè)置將會(huì)被移動(dòng)到這些用戶文件中。這些文件全局設(shè)置也會(huì)被導(dǎo)入到所有轉(zhuǎn)換而來(lái)的以及新創(chuàng)建的項(xiàng)目中。

      下面是通過(guò)用戶界面更改設(shè)置文件的步驟

      ◆點(diǎn)擊View.Property Manage打開(kāi)屬性管理器。

      ◆展開(kāi)項(xiàng)目節(jié)點(diǎn),然后是Configuration|Platform 節(jié)點(diǎn),你將會(huì)看到針對(duì)每個(gè)Configuration|Platform 的"Microsoft.cpp.<Platform>.users" 文件。這些就是提供全局設(shè)置的文件,跟以前的 tools/Options/VC++ 目錄是類(lèi)似的。

      ◆復(fù)選"Microsoft.cpp.<Platform>.users",右鍵點(diǎn)擊彈出窗口的屬性頁(yè)

      ◆在屬性窗口頁(yè)中,單擊左窗格中的"VC++ Directories",添加諸如“Include Directories"的目錄的路徑,以分號(hào)隔開(kāi)。

      ◆請(qǐng)確保關(guān)閉Visual Studio之前保存了剛才的設(shè)置。

      ◆重新啟動(dòng)Visual Studio,新的設(shè)置將會(huì)生效。

      -注意:如果你想只改變一個(gè)項(xiàng)目的設(shè)置,你可以右鍵單擊該項(xiàng)目,彈出屬性頁(yè)。更改“VC++ Directories”的設(shè)置,這些設(shè)置便被保存到項(xiàng)目文件中。

      4) 自定義生成規(guī)則的改變

      在Visual Studio 2008中,自定義生成規(guī)則是由.rules文件定義的。轉(zhuǎn)換后,.rules文件將會(huì)變成三個(gè)單獨(dú)的文件:.targets, .xml以及.props。轉(zhuǎn)換后,你會(huì)在.rules所在的目錄中發(fā)現(xiàn)這三個(gè)文件。請(qǐng)注意,沒(méi)有UI可用于添加新的自定義生成規(guī)則。

      5) 改動(dòng)檢查的變化

      當(dāng)你按下F5鍵,檢查改動(dòng)情況的窗口可能每次會(huì)彈出,即使是剛剛才重新構(gòu)建了一次。你可以參照這個(gè)博客來(lái)解決這一問(wèn)題。最有可能的的原因是某些文件被列為了該項(xiàng)目的的一部分,但卻不在磁盤(pán)上了。由于這些文件是項(xiàng)目文件的一部分,更新檢查機(jī)制每次都會(huì)檢查它們是否存在。而如果在磁盤(pán)上不存在該文件,Visual Studio 2010就會(huì)認(rèn)為需要重新構(gòu)建一次。解決方法是,如果那些文件不存在了,請(qǐng)把它們從項(xiàng)目文件中刪除掉。

      Visual Studio 2010中的一個(gè)限制是,它還不支持可控增量構(gòu)建(Managed Incremental build)。我們正在研究如何在未來(lái)版本中支持這一功能。

    ? 在Visual Studio 2010轉(zhuǎn)換過(guò)程中的已知問(wèn)題

      以下是在Visual Studio 2010的轉(zhuǎn)換過(guò)程中已知存在的一些問(wèn)題:

      1)? TargetFrameworkVersion

      轉(zhuǎn)換后,托管的C++項(xiàng)目將設(shè)為默認(rèn)為針對(duì)4.0 Framework。這種設(shè)計(jì)背后的原因是,Visual Studio 2010構(gòu)建器的不支持2.0,3.0或3.5 Framework。Visual Studio 2008的構(gòu)建器則必須使用2.0,3.0或3.5 Framework。為了使轉(zhuǎn)換后的C++應(yīng)用程序能馬上就能運(yùn)行,我們決定將C++程序的默認(rèn)TargetFrameWorkVersion 屬性改成4.0??梢酝ㄟ^(guò)下面其中一種方法把C++應(yīng)用程序重新定向到其它Framework(如3.5):

      編輯vcxproj文件,并在第一組定義中加入以下內(nèi)容:

    <TargetFrameworkVersion>器v3.5“/ TargetFrameworkVersion”

      打開(kāi)Visual Studio 2010的命令行,設(shè)置TargetFrameworkVersion = v3.5,然后從命令行運(yùn)行devenv.exe。這將把所有C++應(yīng)用的目標(biāo)框架設(shè)為v3.5。

      在構(gòu)建程序時(shí)傳遞/p:TargetFrameworkVersion = v3.5參數(shù)給MSBuild:MSBuild my.vcxproj /p:TargetFrameworkVersion =v3.5

      請(qǐng)注意,要在安裝了Visual Studio 2008的情況下才能把應(yīng)用程序的定向到2.0,3.0或3.5 Framework。

      對(duì)于C#/ VB應(yīng)用程序,如果目標(biāo)Framework已經(jīng)安裝在了計(jì)算機(jī)上,轉(zhuǎn)換過(guò)程中則不會(huì)改變目標(biāo)Framework。 如果目標(biāo)Framework沒(méi)有安裝,你可以選擇下載所需要的Framework或?qū)⒛繕?biāo)Framework升級(jí)到4.0版。

      -如果在你的解決方案中混合有CSharp / VB/托管C++項(xiàng)目,你可能會(huì)碰到它們分別針對(duì)不同目標(biāo)Framework的情況。如果被引用項(xiàng)目的目標(biāo)Framework比引用它的項(xiàng)目的Framework版本還高,你可能會(huì)收到警告MSB3258:

    -The primary reference “foo, Version=x.x.xxx.xxxx, Culture=neutral, processorArchitecture=x86” has an indirect dependency on the .NET Framework assembly “mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089” which has a higher version “4.0.0.0” than exists in the current target framework. The version found in the current target framework redist list is “2.0.0.0”. By including the primary reference you may get compile and/or runtime errors.

      -你也可能如C4691這樣的警告:type referenced was expected in the unreferenced assembly ‘file’, type defined in current translation unit used instead, if the Framework version of the referencing project is higher.

      -你需要把解決方法中的所有項(xiàng)目設(shè)為同一個(gè)版本的Framework。

      2)???? 在makefile的"Output"屬性中使用引號(hào)

      如果某個(gè)項(xiàng)目的makefile中"Output"屬性里有引號(hào),轉(zhuǎn)換將無(wú)法進(jìn)行。解決方法是在轉(zhuǎn)換前把"Output"屬性里的引號(hào)去掉。

  • <Tool
  • Name="VCNMakeTool"
  • BuildCommandLine="nmake /nologo &quot;OUT=$(OutDir)&quot; &quot;OBJ=$(IntDir)&quot;"
  • ReBuildCommandLine="nmake /a /nologo &quot;OUT=$(OutDir)&quot; &quot;OBJ=$(IntDir)&quot;"
  • CleanCommandLine="nmake /nologo &quot;OUT=$(OutDir)&quot; &quot;OBJ=$(IntDir)&quot; clean"
  • Output="&quot;$(OutDir)hlekernel.rom&quot; &quot;$(IntDir)hlekernel_gen.inl&quot; &quot;$(IntDir)hlekernel_gen.h&quot;"
  • PreprocessorDefinitions="WIN32;_DEBUG"
  • IncludeSearchPath=""
  • ForcedIncludes=""
  • AssemblySearchPath=""
  • ForcedUsingAssemblies=""
  • CompileAsManaged=""
  • />
  •   3)? $(IntDir) 和 $(OutDir)中的反斜杠。

      $(IntDir)和$(OutDir)分別對(duì)應(yīng)屬性頁(yè)中的“General -> Intermediate Directories”和“General -> Output Directories”。為了統(tǒng)一$(IntDir)和$(OutDir)的格式,如果沒(méi)有以"\"結(jié)尾的話,轉(zhuǎn)換過(guò)程中會(huì)自動(dòng)在它們的屬性值末尾追加“\”。如果末尾有“/”的話將會(huì)被刪掉。

      不過(guò),如果$(IntDir)或$(OutDir)用在makefile或自定義生成中,Exec任務(wù)會(huì)用到它,這就可能導(dǎo)致構(gòu)建過(guò)程中斷。

      在makefile中,如果它們以"\"結(jié)尾,nmake工具就無(wú)法評(píng)估它的值。例如,使用如下命令,

      BuildCommandLine="nmake /nologo &quot;OUT=$(OutDir)&quot; &quot;OBJ=$(IntDir)&quot;"

      因?yàn)?(OutDir)和$(IntDir)末尾有“\”,nmake工具不能正確地將其展開(kāi),OUT和OBJ的值會(huì)被置為空。為了解決這個(gè)問(wèn)題,你需要在屬性頁(yè)刪除$(IntDir)和$(OutDir)中的"\"。

      如果$(OutDir)或$(IntDir)被傳遞給自定義生成,包括生成事件、自定義生成工具,以及自定義生成步驟,你可能會(huì)遇到構(gòu)建失敗,其原因是“\”可能被這些工具當(dāng)成了轉(zhuǎn)義字符。例如,如果你有一個(gè)跟下面類(lèi)似的預(yù)生成事件:

  • <PreBuildEvent>
  • <Command>cl /c? /Fo"$(IntDir)" "$(ProjectDir)\win32.cpp"</Command>
  • </PreBuildEvent>
  •   命令行是:cl /c /Fo"Debug\" "C:\foo\win32.cpp" instead of cl /c /Fo"Debug\\" "C:\foo\win32.cpp"

      要解決這個(gè)問(wèn)題,在傳遞給/Fo的值中的添加一個(gè)額外的“\”(C/C++ -> Output Files -> Object File Name),以補(bǔ)償被當(dāng)作轉(zhuǎn)義字符的"\"。

      4) 解決方案資源管理器界面

      在Visual Studio 2010中,解決方案資源管理器里的文件和文件夾顯示由.vcxproj.filters文件控制。如果你有名字相同但位置不同的文件夾,例如“Native\Include”和 "Include",那么在轉(zhuǎn)換后,第二個(gè)"Include"和它里面的文件將不會(huì)顯示在解決方案資源管理器中。若要解決此問(wèn)題,你可以重新在解決方案資源管理器創(chuàng)建這個(gè)文件夾,并將相應(yīng)的文件添加到文件夾中。

      5) 只讀的項(xiàng)目文件或目錄

      當(dāng)你從一個(gè)只讀目錄中開(kāi)始升級(jí),或是對(duì)以前只讀的項(xiàng)目文件進(jìn)行重新轉(zhuǎn)換時(shí),都有可能碰到問(wèn)題。務(wù)必確保這些目錄和文件都是可寫(xiě)的,除非你能對(duì)這些文件自動(dòng)進(jìn)行檢查,就像在集成資源管理系統(tǒng)(integrated source control system)中能做到的那樣。

    總結(jié)

    以上是生活随笔為你收集整理的Visual Studio 2010中C++项目升级指南的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。