vc 2008 解決方案的目錄結構設定和管理
乙個中等規模的解決方案通常都會包含多個專案,其中一些專案產出靜態庫,一些產出動態庫,一些用於單元測試,還有的產出最終的應用程式執行檔。除此以外,根據專案的需求,還會使用一些第三方的庫。
所以為解決方案設定乙個合理的目錄結構,不但可以使得**管理更井井有條,專案成員之間也更容易相互配合,更重要的是能夠使得最終應用程式的安裝包製作,源**打包發布和轉移變得十分容易。
解決方案與專案:
從vc6之後vc系列就使用解決方案(solution)來替代原來的工作空間,用於組織和管理多個相關的專案(project)。
文章首先演示乙個虛擬的解決方案和我們期望得到的目錄結構,然後使用vc2008的專案設定功能來一步一步達到我們的需求。
虛擬解決方案:
該虛擬解決方案名為gma,包含乙個動態鏈結庫專案chocolatemilk和乙個應用程式專案puremilk,需要使用乙個第三方庫log4cxx(apache log4j的c++移植版本,用於日誌輸出)。
log4cxx是以動態庫的方式編譯的,所以我們需要它的3樣東西,分別是標頭檔案,導入庫(log4cxx.lib, log4cxxd.lib)和動態鏈結庫(log4cxx.dll)。
假設我們期望的目錄結構如下圖:
1. gma是解決方案目錄
2. puremilk和chocolatemilk是專案目錄
3. lib目錄用於存放導入庫或者靜態庫(包括第三方庫和自己的專案)
4. include用於存放第三方庫的標頭檔案
5. bin目錄存放所有動態鏈結庫和執行檔,包括自己的產出和第三方庫,區分release和debug兩個版本。另外,程式執行過程中需要外部的資料檔案和啟動時需要的配置檔案等等都可放於該目錄
6. temp用於存放臨時生成檔案,其中compile存放編譯器編譯時生成的obj檔案,link存放鏈結器的輸出檔案。
上面目錄結構清晰,一面了然,當我們的程式需要製作安裝包或者要打包原始碼
發布的時候,它能夠使得我們生活變得更容易^_^
製作安裝包時我們只需將「/gma/bin/release/」目錄下的所有檔案打包。
發布和轉移原始碼的時候我們可以打包除了temp目錄以外「/gma/」下面的所有檔案和目錄(如果不需要執行檔,也可不包括bin)。
我們的需求是明確的,可是vc 2008並不會自動為我們做好上面所有的事情。不過我們並不需要編寫複雜的編譯指令碼(makefile),只需要簡單的修改專案的預設設定即可。
我們需要vc為我們做的事情包括:
1.使用「/gma/temp/compile/」作為專案編譯時使用的中間目錄
2.使用「/gma/temp/link/」作為專案鏈結的輸出目錄
3.當專案是應用程式時,在構建結束後拷貝執行檔案到「/gma/bin/release/」或「/gma/bin/debug/」,當專案是動態鏈結庫時,除了拷貝dll到bin,還拷貝導入庫到「/gma/lib/」
4.當專案是應用程式時,除錯時執行「/gma/bin/debug/」或「/gma/bin/release/」下面的執行檔案,並以「/gma/bin/debug/」或「/gma/bin/release/」為工作目錄
首先看一下專案設定中可以使用的巨集,常用的有:
configurationname
配置名字,通常是debug或者release
intdir
編譯器使用的中間目錄,產出obj檔案
outdir
鏈結器使用的輸出目錄
projectdir
專案目錄
projectname
專案名字
solutiondir
解決方案目錄
targetdir
目標輸出檔案所在的目錄
targetext
目標輸出的副檔名
targetfilename
目標輸出檔名,包括副檔名
targetname
目標輸出名,不包括副檔名
targetpath
目標輸出檔案的全路徑名
首先來設定chocolatemilk:
1.使用「/gma/temp/compile/」作為專案編譯時使用的中間目錄
2.使用「/gma/temp/link/」作為專案鏈結的輸出目錄
注意高亮的部分,首先將配置改成all configuration(全部配置),這樣可以讓我們同時修改debug和release的部分;
output directory(輸出目錄,鏈結器)字段填入:
$(solutiondir)\temp\link\$(projectname)\$(configurationname)
intermediate directory(中間目錄,編譯器)字段填入:
$(solutiondir)\temp\compile\$(projectname)\$(configurationname)
3.構建結束後拷貝動態鏈結庫到「/gma/bin/release/」或「/gma/bin/debug/」,拷貝導入庫到「/gma/lib/」
我們通常都會在debug版本的輸出庫後面加上字母「d」以表示這是debug版本,在debug配置下,修改import library欄位:
vc可以讓我們設定構建前後執行的指令碼程式,所以為了完成3,
我們需要寫構建後執行的指令碼:
在command line中填入,debug配置下:
copy $(targetpath) $(solutiondir)\bin\$(configurationname)\;
copy $(targetdir)$(targetname)d.lib $(solutiondir)\lib\;
release配置下:
copy $(targetpath) $(solutiondir)\bin\$(configurationname)\;
copy $(targetdir)$(targetname).lib $(solutiondir)\lib\;
之所以要分別設定是因為vc沒有表示導入庫的巨集名字 -_-p
ok,到此為止,你就可以編譯chocolatemilk專案試試是不是一切正常了,不過請確認拷貝的目標目錄事先建立好。
接下來我們設定應用程式專案puremilk:
1.使用「/gma/temp/compile/」作為專案編譯時使用的中間目錄
2.使用「/gma/temp/link/」作為專案鏈結的輸出目錄
首先將配置改成all configuration(全部配置),這樣可以讓我們同時修改debug和release的部分;
output directory(輸出目錄,鏈結器)字段填入:
$(solutiondir)\temp\link\$(projectname)\$(configurationname)
intermediate directory(中間目錄,編譯器)字段填入:
$(solutiondir)\temp\compile\$(projectname)\$(configurationname)
3.構建結束後拷貝執行檔案到「/gma/bin/release/」或「/gma/bin/debug/」
在command line中填入,all配置下:
copy $(targetpath) $(solutiondir)\bin\$(configurationname);
4.除錯時執行「/gma/bin/debug/」或「/gma/bin/release/」下面的執行檔案,並以「/gma/bin/debug/」或「/gma/bin/release/」為工作目錄
command欄位填入:$(solutiondir)\bin\$(configurationname)\$(targetfilename)
working directory欄位填入:$(solutiondir)\bin\$(configurationname)\
這樣就大功告成了,現在你就可以編譯該執行程式並進行除錯。
VS2008開啟解決方案後自動關閉
在其他地方拷貝來的專案,vs2008開啟解決方案後居然自動關閉!原因竟然是vs使用微軟雅黑字型!真是鬱悶!後來只得重置了vs的設定,方法 在開始 執行中輸入命令 cmd devenv.exe resetuserdata 要使用此引數,請執行以下操作 1.關閉所有 visual studio 2005...
VS2008安裝錯誤,解決方案
重新整了一下電腦,再次安裝vs2008,以前安裝很順利,沒想到這次安裝卻是失敗了,各種錯誤,一路安裝失敗,再谷歌安裝,最後終於安裝成功,記下來,呵呵!剛開始安裝時出現錯誤如下 一會就出現如下錯誤 又出現這個錯誤,都快讓人崩潰了,經過一番谷歌,終於找到解決方案了。出現這個錯誤時 1 在 wcu web...
VS2008無法正確開啟專案 解決方案
問題描述 開啟dnn5.4.2 source的解決方案,如下圖所示 但是沒有正確開啟,左後發現開啟的居然是dnn.5.2.3 source。就是說dnn5.4.2 s沒開啟。已經測試過確實如此。dnn.5.2.3 source和dnn5.4.2 source在同乙個根目錄下。如下圖所示 dnn.5....