📘
C++Builder12 でMSBuildを使用する
MSBuildとは
Microsoftのビルドエンジンであり、通常はVisualStudioで使用されている。
Delphi,C++Builderも対応しており、コマンドラインからビルドが可能になっている。
これにより、ビルド後の実行ファイルの配置なども自動化できる。
使い方
C++Builderインストール時にバンドルされる "Rad Stdio コマンドプロンプト"を使用することが最も簡単である。プロジェクトファイルの存在するフォルダでMSBUILDコマンドを叩くことで自動的にビルドが行われる。
コマンド
Project1というプロジェクトをビルドする場合は以下のように記述する。
msbuild Project1.cbproj /t:Build /p:config=Release /p:platform=Win32
- プロジェクトを指定しない場合は、ディレクトリ内のプロジェクトをビルドする
- ターゲットの指定
- /t:Clean ... クリーン
- /t:Make ... コンパイル
- /t:Build ... ビルド
- ビルド構成
- /p:config=Debug ... デバッグモード
- /p:config=Release ... リリースモード
- ターゲットプラットフォーム
- /p:platform=Win32 ... Win32アプリケーション
- /p:platform=Win64 ... Win64アプリケーション
- /p:platform=iOSDevice64 ... iOSアプリケーション(C++Builder12には存在しない)
- /p:platform=Android ... Androidアプリケーション(C++Builder12には存在しない)
- Classicコンパイラ or CLANGコンパイラはIDE側で指定する必要あり
- 筆者環境ではCLANGコンパイラを使用する場合、Releaseモードでビルドができない。
サンプルスクリプト(コマンドプロンプト)
普通のコマンドプロンプトを使用する場合のサンプルコードを記載する。
rem ============
rem 初期パラメータ(Rad Studio コマンドプロンプトを使用しない場合に必要)
rem ============
@SET BDS=C:\Program Files (x86)\Embarcadero\Studio\23.0
@SET BDSINCLUDE=C:\Program Files (x86)\Embarcadero\Studio\23.0\include
@SET BDSCOMMONDIR=C:\Users\Public\Documents\Embarcadero\Studio\23.0
@SET FrameworkDir=C:\Windows\Microsoft.NET\Framework\v4.0.30319
@SET FrameworkVersion=v4.5
@SET FrameworkSDKDir=
@SET PATH=%FrameworkDir%;%FrameworkSDKDir%;C:\Program Files (x86)\Embarcadero\Studio\23.0\bin;C:\Program Files (x86)\Embarcadero\Studio\23.0\bin64;C:\Program Files (x86)\Embarcadero\Studio\23.0\cmake;%PATH%
@SET LANGDIR=JA
@SET PLATFORM=
@SET PlatformSDK=
rem ============
rem ビルド
rem ============
rem {プロジェクトファイルのあるディレクトリまで移動}
msbuild Project1.cbproj /t:Build /p:config=Release /p:platform=Win32
サンプルスクリプト(Python)
Pythonはこんな感じ。
import subprocess
import os
# ============
# 初期パラメータ(Rad Studio コマンドプロンプトを使用しない場合に必要)
# ============
my_env = os.environ.copy()
my_env["BDS"] = "C:\\Program Files (x86)\\Embarcadero\\Studio\\23.0"
my_env["BDSINCLUDE"] = "C:\\Program Files (x86)\\Embarcadero\\Studio\\23.0\\include"
my_env["BDSCOMMONDIR"] = "C:\\Users\\Public\\Documents\\Embarcadero\\Studio\\23.0"
my_env["FrameworkDir"] = "C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319"
my_env["FrameworkVersion"] = "v4.5"
my_env["FrameworkSDKDir"] = ""
my_env["LANGDIR"] = "JA"
my_env["PLATFORM"] = ""
my_env["PlatformSDK"] = ""
my_env["PATH"] = my_env["FrameworkDir"]+ ";" +my_env["FrameworkDir"] + ";" + "C:\\Program Files (x86)\\Embarcadero\\Studio\\23.0\\bin;C:\\Program Files (x86)\\Embarcadero\\Studio\\23.0\\bin64;C:\\Program Files (x86)\\Embarcadero\\Studio\\23.0\\cmake;" + my_env["PATH"]
# ============
# ビルド
# ============
process = subprocess.run(
["msbuild", "/t:Build", "/p:config=Release", "/p:platform=Win32"],
cwd=r"{プロジェクトファイルのあるディレクトリを指定}",
env=my_env, # 環境変数をセットする
shell=True
)
Discussion