# 從問題入手
## 拋出問題
在我的電腦上原本安裝了VS2010專業版,現在由于項目的需要又安裝了VS2015,但原來的VS2010用不了,在VS2010下編譯程序時報如下錯誤:
> 1>TRACKER : error TRK0002: Failed to execute command: “”C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64_x86\CL.exe” @C:\Users\Administrator\AppData\Local\Temp\tmp6095048feb5e4db6845129a7e84fde38.rsp”. 操作標識符不正確。
## 解決方案
從這個錯誤提示中我們可以發現,用VS2010編譯時用的是VS2015的編譯器(Visual Studio 14.0),而且是64位的,說明是用的編譯器不匹配,那如何設置回VS2010的編譯器呢??
通過Google找到了如下答案:?
菜單View->Property Manager->Debug|Win32->Microsoft.Cpp.Win32.user,雙擊它打開設置頁,查看VC++ Directories->Executable Directories值,我們會發現果然設置成了VS2015的編譯器,將它改了,設置成VS2010安裝目錄下的VC\bin目錄,如我的是:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin。?
?
Property Manager
再次編譯程序,會發現這個錯誤沒有了,完美搞定!
但Property Manager這個設置以前還真沒怎么用過,它有什么功能呢?它與右鍵工程->Properties的屬性頁又有什么區別呢?于是對它進行了深一步的探索!
# 深入研究
## 概念性了解
首先,明白兩個概念:Project Property和Property Sheet。?
Project Property:又稱項目屬性,是你當前項目的屬性配制,保存在你工程的配制文件中,*ProjectName*.vcxproj中。
Property Sheet:又稱屬性表,可用于多個工程的屬性配制,可以自己創建添加屬性配制,也可以使用系統默認的屬性表,保存在.props為拓展名的文件中。而屬性表(Property Sheet)的添加和管理就是在Property Manager中進行設置的。
## Property Manager的使用
1. 打開Property Manager窗口。菜單View->Property Manager或View->Other Windows->Property Manager。可看到如下界面:?
?
Property Manager
2. 屬性的設置。雙擊屬性表名稱(如Microsoft.Cpp.Win32.user)就可以對它進行設置了。你會發現它的配制項與右鍵工程->Properties打開的項目屬性是一樣的。Microsoft.Cpp.Win32.user是當前系統用戶默認的屬性表,保存在C:\Users\Administrator\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props中,使用這個用戶名登錄操作系統,用VS創建的所用項目都會繼承這個屬性表的配制屬性。
3. 設置VC++ Directories。在這個配制項中,我們可以設置VC++編譯、鏈接需要的各種工具和資源的路徑。?

VC++ Directories
Executable Directories:可執行程序(如cl.exe、link.exe、lib.exe等)的路徑,一般會包含VC\bin的路徑;?
Include Directories:要包含的頭文件(如CRT的頭文件)的路徑,一般會包含VC\include的路徑;?
Reference Directories:引用的庫的路徑,如MFC的庫(VC\atlmfc\lib);?
Libbrary Directories:要包含的lib庫的路徑,一般會包含VC\lib的路徑;?
Source Directories:源代碼的路徑,一般會包含VC\crt\src的路徑;?
Exclude Directories:不被包含文件的路徑。
4. 自定義宏。在配制工程屬性時你是否經常會看到一些宏,如(SolutionDir)、(Configuration)、$(OutDir)等,但你卻不知道如何更改它,這些都是MSBuild為你預定義的一些宏。其實你也可以定義一些自己的宏,甚至可以重寫原有的宏。方法如下:?

User Macros
這時你在配制自己的工程屬性(如Additional Include Directories)時就能看到自己定義的宏了:?

Use User Macros
5. 添加或導入Property Sheet。這個太簡單了,直接看圖:?
?
Import and Export Property sheet?
這樣你可以在創建同一類型的項目時都(導入進來)使用自己定義的屬性表,就可以多個項目使用相同的設置了,減少設置的負擔。
## 屬性的繼承關系
項目的屬性是分層的。 每一層會繼承前一層的值,但是繼承的值可以通過設置屬性來顯式地重寫。 下面是基本的繼承關系(繼承樹):?
1\. 來自 MSBuild CPP工具集的默認設置(..\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.Cpp.Default.props,它將被?*ProjectName*.vcxproj文件導入)。?
2\. Property sheets(屬性表),也就是Property Manager中設置的屬性表。?
3\. 工程文件*ProjectName*.vcxproj .(可以重寫默認值和property sheet 中的設置)。?
4\. 每一項的元數據。
參考文章:[https://msdn.microsoft.com/en-us/library/669zx6zc.aspx](https://msdn.microsoft.com/en-us/library/669zx6zc.aspx)