最近接手的一個項目開發中用到了很多第三方庫,比如boost、gdal、xerces等等這些。從接手項目到現在從中學習到了很多之前從未見識過的東西。項目絕大部分都是前輩們寫的,對於里面的對第三方庫的管理我感覺是很不錯的,所以記錄下來以備后用,好的東西同時也應該分享給更多的可能會用到的。。。
項目開發中,如果遇到不是自己開發的項目時,當需要另外的人去維護時,經常連正常的編譯連接都不能通過,很多的都是需要設置一些工程屬性什么的,搞了半天最終才能編譯通過。像這些類似的體力活可能是大多數人不願弄的。
這里說的是對項目中所使用到的第三方庫使用屬性表進行統一管理起來,當在其他地方使用這些第三方庫或者功能移植時直接創建或者添加屬性表就可以滿足需要了。
在項目解決方案目錄下建立兩個文件夾一個是用於存放所有第三方庫的,另一個是存放項目中所有的屬性表,這里我建立了一個“ThirdParty”用於存放所有的第三方庫,然后建立了一個“CompileSetting”用於存放所有的屬性表:
其中在“ThirdParty” 目錄下存放的是不同的第三方庫的子目錄例如此處我使用的是一個名為“dll1” 的動態庫子目錄,在“dll1”子目錄下存放的類似是包含“dll”、“lib”、“include”這些的子目錄:
用於存放所使用的名為dll1的動態庫dll、lib和一些頭文件等等。
下面就可以針對“dll1” 添加一個屬性表,方便在項目中使用,具體創建直接貼圖了:
1.添加屬性表
----------------------------------------
2.輸入名稱即所使用的第三方庫的名稱(自定義)
選擇存放屬性表的存放位置,這里需要說明一下就是存放的位置是上面在項目目錄下新建的“CompileSetting” 用於統一存放所有的屬性表。
-------------------------------
3.下面是為所創建的屬性表添加“用戶宏”輸入名稱(自定義)和值。其中值在“$(SolutionDir)”之后是上面在項目目錄下創建的“ThirdParty”目錄以及動態庫其子目錄“dll1”:
----------------
4.然后設置“附加包含目錄”是剛才添加的用戶宏“$(DLL1PATH)”然后跟上其目錄下的子目錄“include“指向動態庫所使用的頭文件:
”
-------------------------------
5.接着設置“附加庫目錄”指向動態庫dll1下子目錄“lib”
-------------------------------------
6.最后設置“生成后事件”拷貝所使用的動態庫dll到可執行程序目錄內,避免執行程序時還要拷貝dll,這里是拷貝到“$(OutDir)” 這也是一個用於輸出編譯的屬性表:
---------------------------------
就此屬性表dll1屬性表創建成功,好像有點麻煩,但是現在麻煩一點是為以后的不麻煩。
下面在說下剛才提到的“$(OutDir)” 這也是一個屬性表,用於設置項目編譯的生成事件。它的創建和上面創建屬性表的方法大致相同:
1.創建一個自定義的屬性表名稱,這里叫做“output”的屬性表,然后分別添加三個用戶宏即:
OUTPATH:
INTPATH:
還有一個DISTPATH:
---------------------------------------------------------------------------------------
至此output屬性表設置成功,下面是設置項目解決方案的生成事件
2.設置“輸出目錄”和“中間目錄”。這里填寫的就是剛才創建output時添加的用戶宏的名稱:
===============================================================================
這樣就可以重新編譯一下項目解決方案了,以后在需要使用到例如dll1的動態庫,直接拷貝“CompileSetting”和“ThirdParty”兩個文件目錄就行,想使用哪個動態庫直接添加各動態庫的屬性表就可以,這里需要再說明一下屬性表區分Debug和Release以及區分32位和64位的,所以創建的時候需要分別創建。