在Visual Studio中進行C++工程屬性的配置時,同樣也會遇到與寫代碼類似的場景,例如我們可能會在不同的表單(同一個工程或者多個工程)中,填寫相同的內容(例如某個路徑)。這樣就造成了一些重複性的勞動,而且填寫時可能因爲疏忽而造成錯誤,修改時也需要找到所有填寫這個內容的地方。爲了解決這個問題,Visual Studio在工程屬性配置時,也提供了宏這樣一個工具,來幫助我們減少這些無謂的辛勞。
C++工程屬性中的宏
工程屬性中的宏具體長得是什麼樣子呢?在打開工程屬性時,我們在表單中可能經常會看到一些以美元符號($)爲開頭的字符串,$(SomeMacro)。其實這些字符串便是Visual Studio中默認定義的一些宏,它們其實就是代表一些與某個工程相關的常量字符串。在下圖中我們可以看到一些這樣默認定義的宏:
任意點擊一個表單,然後點擊Edit選項,便可以在彈出的窗口中,查看這些默認定義宏的含義。
注意到上面兩個宏進行結合,對項目的輸出路徑(Output)進行了配置,也就是項目生成exe、lib或dll的地方。Visual Studio中還有很多類似這樣的宏,有些宏還是和機器相關的,所以我們也可以利用其來進行工程配置,避免因爲不同機器上路徑不同,而對每臺機器單獨配置一次屬性。對工程屬性中默認定義的宏,微軟的官方指南上也有一個比較詳細的介紹。
http://msdn.microsoft.com/en-us/library/c02as0cs.aspx
自定義工程屬性中的宏
那麼我們如何自己定義工程屬性中的宏呢?首先我們需要打開屬性管理器選項卡(Property Manager),然後爲工程添加一個屬性頁面(Property Sheet)。該屬性頁面在被添加後,會被當前的工程屬性繼承,於是便可以使用其中定義的宏了。
以上添加了一個宏,代表使用OpenCV第三方庫的版本號,因爲在第三方庫升級時,庫的名字也會隨版本號發生改變;而使用了宏後,我們就可以很方便的修改引用庫的名稱了。下面我們可以回到原來的工程屬性當中來,利用上面的宏來動態確定引用庫的名稱。
我們可以看到,Linker當中所展開的命令行參數中,$(OpenCVLibVersion)已經被展開爲245了。而以後在發生庫版本的升級時,便可以只修改$(OpenCVLibVersion)這個宏便可以正常使用升級後的庫了,所以這種方法還是很實用的吧。在工程屬性的配置中,宏的使用場景還有很多,如果能夠靈活使用,便可以節省很多的時間,避免很多因重複勞動所造成的錯誤。