用VS的命令列工具編譯工程
作者:朱金燦
在VS2008下面提供了devenv.com命令列方式,我們可以從VS安裝目錄..\MicrosoftVisual Studio 9\Common7\IDE下面找到它,以下是幾個常見用法(VS 2005對應的目錄下也有這樣的工具):
用法:
devenv.com [solutionfile | projectfile |anyfile.ext] [switches]
devenv.com的第一個引數通常是一個解決方案檔案或專案檔案。
如果您希望在編輯器中自動開啟檔案,
也可以使用任何其他檔案作為第一個引數。當您輸入專案檔案時,IDE
會在專案檔案的父目錄中查詢與該專案檔案具有相同
基名稱的 .sln 檔案。如果不存在這樣的 .sln 檔案,
IDE 將查詢引用該專案的單個 .sln 檔案。如果不存在這樣的單個
.sln 檔案,則 IDE 將建立一個具有預設 .sln 檔名的未儲存
的解決方案,其基名稱與專案檔案的基名稱相同。
命令列生成:
devenv.comsolutionfile.sln /build [ solutionconfig ] [ /project projectnameorfile [
/projectconfig name ] ]
可用的命令列開關:
/Build 使用指定的解決方案配置生成解決方案或
專案。例如“Debug”。如果可能存在多個平臺,
則配置名稱必須用引號括起來
並且包含平臺名稱。例如“Debug|Win32”。
/Clean 刪除生成結果。
/Command 啟動 IDE 並執行該命令。
/Deploy 生成並部署指定的生成配置。
/Edit 在此應用程式的執行例項中開啟
指定檔案。如果沒有正在執行的例項,
則啟動一個具有簡化窗口布局的新例項。
/LCID 設定 IDE 中用於使用者介面的預設語言。
/Log 將 IDE 活動記錄到指定的檔案以用於故障排除。
/NoVSIP 禁用用於 VSIP 測試的 VSIP 開發人員許可證金鑰。
/Out 將生成日誌追加到指定的檔案中。
/Project 指定生成、清理或部署的專案。
必須和 /Build、/Rebuild、/Clean 或 /Deploy 一起使用。
/ProjectConfig 重寫解決方案
配置中指定的專案配置。例如“Debug”。如果可能存在
多個平臺,則配置名稱必須用引號括起來
幷包含平臺名稱。例如“Debug|Win32”。
必須和 /Project 一起使用。
/Rebuild 先清理,然後使用指定配置生成
解決方案或專案。
/ResetAddin 移除與特定外接程式關聯的命令和命令使用者介面。
/ResetSettings 恢復 IDE 的預設設定,還可以重置為
指定的 VSSettings 檔案。
/ResetSkipPkgs 清除所有新增到 VSPackages 的 SkipLoading 標記。
/Run 編譯並執行指定的解決方案。
/RunExit 編譯並執行指定的解決方案然後關閉 IDE。
/SafeMode 以安全模式啟動 IDE,載入最少數量的視窗。
/Upgrade 升級專案或解決方案以及其中的所有專案。
並相應地建立這些檔案的備份。有關備份
過程的更多資訊,請參見
“Visual Studio 轉換向導”上的幫助。
產品特定的開關:
/debugexe 開啟要除錯的指定可執行檔案。
命令列的其餘部分作為它的引數
傳遞到此執行檔案。
/useenv 使用 PATH、INCLUDE、LIBPATH和 LIB 環境變數
而不是使用 VC++ 生成的 IDE 路徑。
要從命令列附加偵錯程式,請使用:
VsJITDebugger.exe -p <pid>
編譯的工程版本必須和VS版本對應,否則會提示該專案沒有被轉換。
還有一點需要注意,如果在sln裡面設定了dependence,一旦Clear某個Project,會導致其他相依賴的Project也會被Clear,造成編譯時間上的浪費,為了節省時間,你可以重新命名sln或者刪除sln,這樣編譯就不會考慮工程間依賴關係。
devenv 的第一個引數通常是一個解決方案檔案或專案檔案。如果您希望在編輯器中自動開啟檔案,也可以使用任何其他檔案作為第一個引數。當您輸入專案檔案時,IDE會在專案檔案的父目錄中查詢與該專案檔案具有相同基名稱的 .sln 檔案。如果不存在這樣的 .sln 檔案,IDE 將查詢引用該專案的單個 .sln 檔案。如果不存在這樣的單個.sln 檔案,則 IDE 將建立一個具有預設 .sln 檔名且未儲存的解決方案,其基名稱與專案檔案的基名稱相同。
下面以一個批處理例子說明devenv.com的用法。現在我們要編譯著名的cximage600工程。cximage600工程有下面的專案:
我們把demo工程設為主呼叫工程。然後我寫一個批處理檔案編譯CxImgLib.sln。
rem ************************************************rem * Script to compile the solutions of CxImgLib *rem * Created by: zhujincan *rem * Created 2012.12.06 *rem ************************************************rem set environment variables:set _devenv="%VS90COMNTOOLS%..\..\Common7\IDE\devenv.com"rem set compile logset _log="%~dp0compileResults.log"echo [%DATE% %Time%] Start compile sequence >%_log%echo Used compile configuration is %buildAnyCPU% >>%_log%rem Start compile************************************************set _solution_file="%~dp0CxImgLib.sln"%_devenv% %_solution_file% /build "Debug|Win32" /Out %_log%if not %errorlevel% == 0 echo %_solution_file% failed! Error: %errorlevel% >>%_log%if %errorlevel% == 0 echo %_solution_file% compiled successful >>%_log%rem If compile failed stop processing:if not %errorlevel% == 0 pauseecho [%DATE% %Time%] Finished compile sequence >>%_log%pause
該批處理檔案放在原始碼根目錄下(即和解決方案檔案的同一級目錄下),生成日誌放在原始碼根目錄下compileResults.log中.這個批處理檔案可以和svn的原始碼更新命令綁在一起實現從原始碼更新到編譯,也可以放在伺服器上作為每日構建的指令碼。
參考文獻:
如果你覺得我的部落格對你有幫助,請在下面網址中部落格之星評選活動中投我一票:http://vote.blog.csdn.net/item/blogstar/clever101(單擊候選人介紹下面的投他一票那個按鈕)參與投票有機會獲獎: 最佳貢獻獎:通過微博分享活動就有機會獲得30元充值卡一張(每週抽選5名) 幸運獎:凡參與投票使用者就有機會獲得精美小禮品一份。(每週抽選5名) 積極參與獎:所有參與投票並符合條件的使用者均可獲得20個下載積分。