1. 程式人生 > >用VS的命令列工具編譯工程

用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個下載積分。