VS で gcc のようにファイルを指定してビルドする方法
gcc(g++) などのコンパイラではファイルを指定してコンパイルします。
$ g++ main.cpp foo.cpp大きなアプリケーションになると各ソースファイルのコンパイルを定義した Makefile を作成して、 make でビルドするのが一般的です。
それに対して、 Visual Studio でプロジェクトを作ってから、ビルドします。
しかし、ちょっとした確認などで gcc のようにファイルを指定してコマンドラインで コンパイルしたい場合もあります。
実は Visual Studio にも cl というコマンドラインのコンパイラがあって、 gcc のようにソースファイルを指定してコンパイルすることができます。
使うための準備がいろいろあるのですが、前に書いた Windows 版 Qt で nmake を使ったビルド方法 とほぼ同じです。
今回はもう少し詳しく書いてみようと思います。
準備
コンパイルにはコンパイラやビルド用のライブラリファイルが必要となります。 これらをまずインストールする必要があります。- Visual Studio (Express)
- Microsoft Windows SDK
これで GUI アプリなども作成できるのですが、基本的なものしか用意されていないので、 実際に使えるようなアプリを使いたい場合には、 製品版を買うか、 Qt などのツールキットを使った方がいいと思います。
Windows SDK はヘッダやライブラリなどをまとめた開発キットで、前は Plathome SDK という名前でした。
環境設定
コンパイルをコマンドラインで行う場合にはいろいろと環境変数の設定が必要になってきます。これはインストール時にスタートアップメニューに追加された 「 Visual Studio コマンドプロンプト(XXXX)」 から実行すると環境変数を設定して、 コマンドプロンプトを実行してくれるので、設定する必要はありません。
しかし、 Windows 標準のコマンドプロンプトはちょっと使いづらいです。 そこで eshell, Windows Power Shell, nyacus といったのシェルツールを使いたくなってきますが、 この場合は環境変数の設定が必要となります。
環境設定画面は以下の手順で呼び出します。(Windows OS のバージョンの違いで微妙に違います)
- コンピューターを右クリックメニューから [プロパティ]
- [システムの詳細設定]
- [詳細設定] タブの [環境変数] ボタン
設定する環境変数は正確には以下のファイルの内容を確認する必要があります。
ただし、たいていは以下の設定だけでいけると思います。(VS のインストールフォルダー)\Common7\Tools\vsvar32.bat
環境変数 | 値 |
---|---|
VSINSTALLDIR | (VS のインストールフォルダー) |
WindowsSdkDir | (Windows SDK のインストールフォルダー) |
INCLUDE | %VSINSTALLDIR%\Include;%WindowsSdkDir%\Include |
LIB | %VSINSTALLDIR%\Lib;%WindowsSdkDir%\Lib |
LIBPATH | %LIB% |
PATH | %VSINSTALLDIR%\Bin;%WindowsSdkDir%\Bin;(.NET フレームワークのフォルダー) |
%xxx% は環境変数の値を他の値の定義で使用するための記述方法です。
正確には、 VSINSTALLDIR や WindowsSdkDir の変数は他の変数に直接フルパスを書けば、 必要ないのですが、インストール先を変更した場合などに一箇所変更するだけですむようにしています。
.NET フレームワークのフォルダーは以下のようなパスです。 これはフレームワークのバージョンによって、最後のフォルダー名が変わります。
c:\Windows\Microsoft.NET\Framework\v4.0.30319
使用法
使用方法は gcc などのコンパイラとほぼ同じです。ソースファイルを引数に指定して実行します。 複数のファイルがある場合でも、他のコンパイラと同様にリンカーも自動的に呼び出して 結合してくれます。
$ cl main.cpp foo.cpp出力される実行ファイルは指定しなかった場合は、 "ファイルのベース名" + .exe となります。 上記の例では main.exe が生成されます。
指定する場合は /Fe オプションを使用します。
$ cl /Febar.exe main.cpp foo.cpp # bar.exe が生成されます。".exe" は省略可能です
その他のオプションは MSDN に一覧があります。
よく使うオプションとしては次のようなものだと思います。
オプション | 目的 |
---|---|
/HELP | ヘルプ(コンパイラ オプションのリスト)を出力 |
/D | 定数とマクロを定義 |
/I | インクルードファイルの検索パスの追加 |
/EH | 例外処理のモデルを指定。 STL など標準ライブラリを使う場合は /EHsc と指定していないとワーニングが発生します。 |
他にはデバッグビルドの指定などを gcc などのコンパイラーではよく使うと思いますが、 デバッグをしたい場合は VS プロジェクトを作る必要があるので、そちらを使用した方がいいでしょう。
dll(ダイナミックリンクライブラリ) を使用する場合、 公開関数の定義情報を持つ lib ファイルをコンパイル時に指定する必要があります。
この lib ファイルの指定方法は通常のファイルと同じように引数として指定するだけです。
$ cl main.cpp user32.libただし、この指定する lib ファイルへのパスが環境変数 LIB で定義されている必要があります。
指定する lib ファイルは WIN32API の MSDN に関数でどの lib が必要かという情報が書かれていますので、 そちらを見て、指定を追加するようにしてください。
- 関連記事
-
- VS のビルドをコマンドラインで実行する
- VS で gcc のようにファイルを指定してビルドする方法
- Windows でライブラリの依存関係を調べる
- dll, def ファイルから lib ファイルを作成
Facebook コメント
コメント
No title
これもアリだと思います。