標籤:
原文地址
你是否曾經也有過這樣的問題:
用VS的時候,有時會用到一些非內建的庫,例如WTL、Boost、DX等,每次需要用到時都要在項目屬性裡添加相應的include目錄,久而久之覺得有點麻煩。是否有解決辦法呢?
於是我便在網上找相關資料,在StackOverflow網站上找到一篇相關的文章(原文連結),文章裡提到的一個辦法是修改
C:\Users\<user>\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props 這個檔案,在這個檔案裡添加需要include的目錄,之前我一直是用這個方法,也沒啥問題。
當 我安裝了VS2012之後,問題變出現了。在VS2012上建立一個MFC的工程,什麼也沒動,居然編譯不通過,提示找不到某些檔案,我便聯想到了是不是 之前修改了影響到了,於是我果斷把修改的那個檔案恢複成預設的內容,再試,結果就沒問題了。。。可是這樣就得每次都手動添加WTL的目錄了。。我便開始翻 VS的一些設定檔。
解決方案一
修改 "VS安裝目錄中的\VC\VCWizards\default.vcxproj" 這個檔案,(這其實就是個xml檔案)
如我的目錄是"D:\Program Files\Microsoft Visual Studio 11.0\VC\VCWizards\default.vcxproj"
如果我要添加的目錄是"D:\Program Files\Microsoft Visual Studio 11.0\VC\WTL\include";
用文字編輯器開啟這個檔案,定位到檔案末尾,在</Project>之前插入如下內容
<PropertyGroup> <IncludePath>$(VCInstallDir)\WTL\include;$(IncludePath)</IncludePath> </PropertyGroup>
$(VCInstallDir)\WTL\include;就是需要添加的目錄了。$(VCInstallDir)是VS裡的環境變數(在我的電腦上就是"D:\Program Files\Microsoft Visual Studio 11.0\VC"),表示VC的安裝目錄。$(IncludePath)是表示原有的路徑。實際上最終得到的路徑有四個。
如果需要添加lib檔案的路徑的話。格式就是<LibraryPath></LibraryPath>
添加完後儲存即可,建立一個項目後,在項目屬性裡可以看到目錄已經加進去了。大功告成,VS2010也是用同樣的方法,只不過目錄不同了。
解決方案二
這個方法是結合了開頭提到的StackOverflow網站上的修改方法。
依然是修改 "VS安裝目錄中的\VC\VCWizards\default.vcxproj" 這個檔案,只不過這裡修改的地方不同,用文字編輯器開啟該檔案,尋找"$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"這段內容,
其實這裡就是指向了我電腦上的那個檔案C:\Users\HwangBae\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props;這裡我就想到了,為VS2010和VS2012指定不同的檔案,
將"$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"全部替換成"$(UserRootDir)\VC11\Microsoft.Cpp.$(Platform).user.props"。
然後在C:\Users\HwangBae\AppData\Local\Microsoft\MSBuild\v4.0這個目錄下建立了兩個檔案夾,分別命名為VC10和VC11,然後將Microsoft.Cpp.Win32.user.props複製到這兩個檔案夾,然後除了這兩個檔案夾外的檔案均可刪除,其他的檔案VS會在那兩個檔案夾裡自動重新建立的;
然後編輯Microsoft.Cpp.Win32.user.props這個檔案,在<Project>節點下按照方法一的步驟插入同樣的代碼。在VS2010的目錄下也做同樣的替換。到此就完事了。測試無任何問題。
總結一下這兩種方法的區別,方法一修改後,只對建立的項目有效,在沒修改之前建立的項目是無效的,而方法對於之前建立的項目也有效。哪種方法比較適合大家自己取捨。
[轉載] 為Visual Studio添加預設INCLUDE包含路徑的方法