VS で gcc のようにファイルを指定してビルドする方法

Visual Studio (Visual C++) を使ったコンパイルでファイルを直接指定する方法の紹介です。

gcc(g++) などのコンパイラではファイルを指定してコンパイルします。
 $ g++ main.cpp foo.cpp 
大きなアプリケーションになると各ソースファイルのコンパイルを定義した Makefile を作成して、 make でビルドするのが一般的です。

それに対して、 Visual Studio でプロジェクトを作ってから、ビルドします。
しかし、ちょっとした確認などで gcc のようにファイルを指定してコマンドラインで コンパイルしたい場合もあります。
実は Visual Studio にも cl というコマンドラインのコンパイラがあって、 gcc のようにソースファイルを指定してコンパイルすることができます。

使うための準備がいろいろあるのですが、前に書いた Windows 版 Qt で nmake を使ったビルド方法 とほぼ同じです。
今回はもう少し詳しく書いてみようと思います。

準備

コンパイルにはコンパイラやビルド用のライブラリファイルが必要となります。 これらをまずインストールする必要があります。 最近は Visual Studio も無料版の Express Edition が提供されているので、 無料でプログラミングが始められるようになってます。
これで GUI アプリなども作成できるのですが、基本的なものしか用意されていないので、 実際に使えるようなアプリを使いたい場合には、 製品版を買うか、 Qt などのツールキットを使った方がいいと思います。
Windows SDK はヘッダやライブラリなどをまとめた開発キットで、前は Plathome SDK という名前でした。

環境設定

コンパイルをコマンドラインで行う場合にはいろいろと環境変数の設定が必要になってきます。
これはインストール時にスタートアップメニューに追加された 「 Visual Studio コマンドプロンプト(XXXX)」 から実行すると環境変数を設定して、 コマンドプロンプトを実行してくれるので、設定する必要はありません。

しかし、 Windows 標準のコマンドプロンプトはちょっと使いづらいです。 そこで eshell, Windows Power Shell, nyacus といったのシェルツールを使いたくなってきますが、 この場合は環境変数の設定が必要となります。

環境設定画面は以下の手順で呼び出します。(Windows OS のバージョンの違いで微妙に違います)
  1. コンピューターを右クリックメニューから [プロパティ]
  2. [システムの詳細設定]
  3. [詳細設定] タブの [環境変数] ボタン

設定する環境変数は正確には以下のファイルの内容を確認する必要があります。

(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 が必要かという情報が書かれていますので、 そちらを見て、指定を追加するようにしてください。

関連記事
スポンサーサイト



Prev.    Category    Next 

Facebook コメント


コメント

No title

VC++なら、Ctrl+F7で今開いてるソースだけコンパイルできますね。
これもアリだと思います。

コメントの投稿

Font & Icon
非公開コメント

このページをシェア
アクセスカウンター
アクセスランキング
[ジャンルランキング]
コンピュータ
23位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
7位
アクセスランキングを見る>>
カレンダー(アーカイブ)
プルダウン 降順 昇順 年別

05月 | 2023年06月 | 07月
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -


はてな新着記事
はてな人気記事
ブロとも申請フォーム
プロフィール

yohshiy

Author:yohshiy
職業プログラマー。
仕事は主に C++ ですが、軽い言語マニアなので、色々使っています。

はてブ:yohshiy のブックマーク
Twitter:@yohshiy

サイト紹介
プログラミング好きのブログです。プログラミング関連の話題や公開ソフトの開発記などを雑多に書いてます。ただ、たまに英語やネット系の話になることも。