寫的不錯,最近ogre的專案管理各種混亂,整理一下思路
原文**
vs解決方案和各個專案資料夾以及解決方案和各個專案對應的配置檔案包含關係,
假設新建乙個專案ssyy,解決方案起名fangan,注意解決方案包括專案,此時生成的最外層目錄為fangan代表整個解決方案的內容都在這個資料夾內。在這個fangan資料夾內包含有fangan.sln的解決方案配置檔案和乙個ssyy資料夾,ssyy資料夾代表整個ssyy專案的所有內容都在這個資料夾內,這個資料夾內含有ssyy.vcproj的專案配置檔案和.h標頭檔案以及.cpp原始檔。如果在fangan解決方案下再建立乙個新專案名為ssyy2,則會在fangan資料夾下生成乙個ssyy2資料夾存放ssyy2專案的所有內容。
fang
fang.sln(解決方案配置檔案)
\ssyy
ssyy.vcproj(專案配置檔案)
\ssyy2
ssyy2.vcproj(專案配置檔案)
由上面敘述可以總結出,管理器(解決方案或專案)都會對應乙個總的資料夾,這個管理器資料夾下存放本管理器的配置檔案以及子管理器。比如,解決方案是個管理器,它的資料夾下含有.sln配置檔案以及子管理器ssyy專案和子管理器ssyy2專案。另外,預設情況下,專案屬性設定的目錄起點為專案配置檔案所在位置,實際上就是專案標頭檔案和原始檔所在位置。即***.vcproj所在的位置
如果我們建立乙個預設的vc專案ssyy,他的預設「常規「欄目中,「輸出目錄」為$(solutiondir)$(configurationname),所以除錯時會在解決方案資料夾下建立乙個debug(configurationname的值為debug)資料夾,並在此資料夾下生成 ssyy.lik鏈結器 和ssyy.exe檔案 。預設「中間目錄」為$(configurationname),所以會在ssyy專案資料夾下(即ssyy.vcproj的專案配置檔案所在位置)建立乙個debug資料夾,並在該資料夾下生成ssyy.obj二進位制檔案。預設「鏈結器」欄目下的「常規」選項下的「輸出檔案」選項為$(outdir)\$(projectname).exe,其中$(outdir)就已經在「常規」欄目的「輸出目錄」選項賦值了。
\ssyy
\debug
ssyy.exe
【所以$(outdir)的值是在「輸出目錄」屬性中定義的
】。「輸出目錄」屬性只能起到對$(outdir)系統變數賦值的作用
,和「改變生成的.exe檔案存放位置」沒任何關係。也就是說,如果「輸出目錄」中設定的$(outdir)值在c盤,而「輸出檔案」中設定輸出檔案的位置為d盤,最終生成的exe檔案會在d盤,「輸出檔案」屬性才決定輸出exe檔案的位置。
而$(targetdir)
的值是在生成exe檔案後自動賦予值為exe檔案所在位置。所以可以說,「輸出檔案」最終決定exe檔案所在的位置,也最終決定了$(targetdir)的值,$(targetpath)和$(targetdir)的行為是類似的,此不贅述。
總結如下,預設情況下「輸出目錄」和「輸出檔案」兩個屬性對應的目錄是一樣的,這樣用著方便(當然,輸出檔案的值在輸出目錄的值的基礎上還包含有exe檔名)。如果兩個不一樣,則中間生成的鏈結器用的如xx.ilk和xx.pdb檔案等在輸出目錄,而最終生成的xx.exe檔案在「輸出檔案」屬性設定的目錄中。
當除錯程式時,系統變數$(outdir)的值是最先確定的,而$(targetdir)和$(targetpath)的值是在exe檔案生成後才確定的。
也就是說系統變數$(outdir)的值由vs專案的「輸出目錄」屬性決定,而$(targetdir)和$(targetpath)的值由vs專案的「輸出檔案」屬性決定。即設定了vs的「輸出目錄」屬性就相當於設定了$(outdir)的值,「輸出目錄」是介面上的提示用於接收使用者輸入的配置資訊,然後把這個具體的配置資訊存入系統內容的變數$(outdir)中。(即可以通過屬性--常規--輸出目錄進行修改)
其它常用的屬性還有,「除錯」欄目中的「工作目錄」項,這個屬性預設情況下是空的,但表示工作目錄是工程目錄,也就是工程配置檔案ssyy.vcproj所在目錄。 「
工作目錄」屬性作用是程式執行後唯一識別的預設目錄,即工作後只認識這個目錄,工作目錄這個名字描述的就很形象
,(可以將所依賴的
lib和
dll庫檔案所在目錄設為工作目錄,但一般是把lib放在解決方案下的lib目錄中,把dll放在解決方案下的bin目錄中
),例如程式執行過程中生成乙個txt文字檔案,如果在建立檔案過程中未指定絕對路徑,只指定建立檔案的檔名,那麼這個文字檔案預設就會建立在工作目錄中,當然讀取一些配置檔案也在工作目錄中查詢,但要說明一下,生成的exe檔案跟工作目錄沒任何關係,也不會放在工作目錄中。總的來說,工作目錄就是程式執行過程中預設讀取的目錄。對於dll,如果是程式執行前就進入記憶體有點像靜態鏈結那樣,此時dll就可以放入exe所在的執行目錄,如果dll是執行中動態載入的一般放在工作目錄,比如外掛程式就放在工作目錄。即工作目錄就是執行期間唯一能識別的預設目錄,工作目錄在**中用
getcurrentdirectory之類的函式獲取,具體**間最下面的附1
。工作目錄與執行目錄可以不同,例如乙個人住在北京,但他的工作地點不一定在北京,可能在天津。 【
對工作目錄的補充
:vs中工作目錄的設定是給除錯用的,也即你啟動除錯後,啟動乙個新程序,自動把這個新程序的工作目錄設定為vs專案屬性中的工作目錄,然後新程序啟動對應的exe程式。但是如果不使用vs的除錯啟動exe,而是直接雙擊exe檔案啟動乙個新程序時,會自動把這個新程序的工作目錄設定為exe檔案所在的目錄,這是和vs啟動除錯不同的地方。所以如果發布的時候不把工作目錄內的東西拷到exe所在的目錄內,就會執行出錯,因為此時工作目錄不再是vs中設定的了,而是exe檔案所在的目錄。最後,說一下,vs中預設的vc++工程的工作目錄專案的值是空的,代表預設是vs工程所在目錄即.vcproj檔案所在目錄,c#工程預設沒測試,估計和vc的一樣。】
【同樣在除錯選項下的和工作目錄選項同一級的選項「
命令」選項是設定,使用除錯時,從**啟動exe檔案,因為一般生成的exe放在bin目錄下的debug或release目錄下,所以命令選項一般為「bin\$(configuration)\$(projectname).exe」,預設也是這個值,當然可以更改,但此時意味著除錯狀態下啟動的exe為「命令」選項中設定的exe檔案,而不是預設的bin目錄下的debug或release下的exe檔案了。最後說一下,上面所說的「除錯」是指vs下啟動exe,包括debug模式和release模式,不要把除錯就理解為只有debug模式。】
「除錯」欄目中的
「命令(command)」屬性項,【這個屬性表示偵錯程式要啟動的exe檔案的全名】,
包括路徑名,預設為
$(targetpath),
而targetpath就表示目標輸出檔案的全路徑名,所以一般情況下它代表的值就等於「輸出檔案」屬性代表的值。當然你也可以人為的更改「命令」屬性的值,比如更改為c:\aa.exe,而「輸出檔案」的值為c:\bb.exe,此時如果輸出檔案所在目錄沒有aa.exe的話(因鏈結器只生成bb.exe而根本不會生成aa.exe),偵錯程式就不能啟動aa.exe,提示找不到aa.exe。當然如果目錄中已經有aa.exe檔案(可以強制賦值乙個bb.exe檔案的副本並命名為aa.exe),此時偵錯程式就可以正常除錯通過。
Visual Studio 開發環境安裝與配置
0001開發環境全屏顯示 在選單欄中選擇 檢視 全屏顯示 選項 快捷鍵 shift alt enter 0002為資料庫建立快取依賴 002 為程式設定版本和幫助資訊 有關程式集的常規資訊通過下列屬性集 控制。更改這些屬性值可修改 與程式集關聯的資訊。assembly assemblytitle 為...
UE4使用Visual Studio編譯配置詳解
通常我們按照官網文件或者教程,在第一次編譯ue4的時候都會讓我們選擇編譯development editor。但是你又沒有想過除了這個選項之外還有很多選項,他們是幹什麼的。其實當時太急於想知道他們的含義沒有太大必要,因為這些選項是會隨著我們之後的開發過程中慢慢領悟的。當我的遊戲 出現問題需要除錯的時...
VisualStudio2010建立專案模板
1.開啟vs2010 新建解決方案 我以典型的三層架構為例分為ui層和bll層 dal層。2.新增 3個專案 設定webui為啟動項,並設定各層的依賴關係。bll依賴於dal,ui依賴於bll。點選 選單欄 專案 專案依賴項 3.分別匯出各個專案 檔案 匯出模板.在用同樣的方法匯出其他兩層。現在我們...