プリントスタック TOKYO

データベースとセキュリティの世界から離れて早数年。過去の記憶を探しています。

Visual Studio 2005 のコマンドでビルド

製品開発において、Windowsプラットフォームのデイリービルドは、非常に面倒です。なぜならば、Visual Studioで開発している場合においては、C言語のコンパイルが UnixLinux のようにシェルスクリプトに make コマンドを記述してデーモンで実行できないからです。
しかし、よく調べてみると Visual Studio にもコマンドでビルドできることがわかりました。これは、devenv.exe を用いて行えます。この devenv.exe は、"\Common7\IDE\" フォルダに配置されています。

利用方法は、下記のようになります。
この場合は、CVSのユーザーをRSA認証できるように(パスフレーズ入力なし)設定しなければなりません。

ソリューションでビルド

devenv.exe [solution file] [build type] [build target]
例: devenv.exe Sample.sln /Build "Release|Win32"

プロジェクト単位でビルド

devenv.exe [solution file] [build type] [build target] /Project [project name]
例: devenv.exe Sample.sln /Build "Release|Win32" /Project sample_project

ログに出力

devenv.exe [solution file] [build type] [build target] /Project [project name] /Out [output]
例: devenv.exe Sample.sln /Build "Release|Win32" /Project sample_project /Out Sample.log

これをBATファイルに記述してWindowsのタスクに登録するれば日、週などの単位でビルドを繰り返すことができます。

@echo off
SET CVSROOT=:ext:account@domain.com:/home/user/cvs
SET DEVENV=[visual Studioのインストールフォルダ]\Common7\IDE\
SET _SRC=[source project]
SET _DRIVE=%~d0
SET _PATH=%~p0
SET _CURRENT=%_DRIVE%%_PATH%
SET _DATE=-%date:~-10,4%%date:~-5,2%%date:~-2,2%
SET _LOG=%_CURRENT%%_DATE%.log
Rem: ソースコードのチェックアウトもしくはアップデート
IF NOT EXIST "%_CURRENT%%_SRC%\." GOTO CHECKOUT
IF EXIST "%_CURRENT%%_SRC%\." GOTO UPDATE
:CHECKOUT
echo ソースをチェックアウト
START /WAIT cvs checkout %_SRC%>NUL
:UPDATE
echo ソースのアップデート
START /WAIT cvs update %_SRC%>NUL
%DEVENV%\devenv.exe Sample.sln /Clean "Release|Win32" /Out %_LOG%
%DEVENV%\devenv.exe Sample.sln /Build "Release|Win32" /Out %_LOG%
FIND "1 失敗" %_LOG% > NUL
IF %ERRORLEVEL% == 0 (
echo ビルドに失敗している可能性があります。
FIND /N "1 失敗" %_LOG% >> ERROR%_DATE%.log
)