コマンドプロンプトからのビルド

MS Visual C++ Expressを起動
[Tools] – [VS command prompt]
Pathを適切に設定

cd /d C:\tem
/d オプションはドライブが異なっても移動できるようにするためのオプション

コンパイル
/c   コンパイルのみ行いリンカを起動しません。

コンパイル時にデフォルトで INCLUDE 環境変数で指定されたディレクトリは検索されます。自分の環境で、環境変数を確認するためには set コマンドが利用できます。
以下のように findstr コマンドと共に使うと便利でしょう。
> set | findstr INCLUDE
INCLUDE=C:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE;C:\ProgramFiles\Microsoft SDKs\Windows\v6.0A\include;

リンク
test.cpp では G etUserName AP I を使っているので、ライブラリファイル a dv a pi32.lib を指定してリンクする必要があります。、どのライブラリを指定すればよいかわからない場合は、dumpbin コマンドを使って、インポートしている関数 (API) を調べます。
> dumpbin /SYMBOLS test.obj | findstr External
00C 00000000 SECT4 notype () External | _main
00D 00000000 UNDEF notype () External | _printf
00E 00000000 UNDEF notype External | __imp__GetLastError@0
00F 00000000 UNDEF notype External | __imp__GetUserNameA@8
010 00000000 UNDEF notype External | ___security_cookie
011 00000000 UNDEF notype () External | @__security_check_cookie@4

名前の頭に付く、’_’ や ‘__imp__’ は無視してください。また名前のサイトに付く、’@<数字>‘ も無視してください。 パラメータの指定で、内部的に使用されているだけです。
A は、Non-Unicode ビルド用の関数であることを示します。ANSI ビルドなどと言われます。 W は Unicode ビルド用の関数です。DLL や EXE ファイルのサイズが気にならないなら、常に Unicode ビルドを行うと良いでしょう。

/OUT   実行可能ファイル名の指定
実行可能ファイル (EXE) のファイル名は、 ひとつのファイルだけの場合は、デフォルトの オブジェクトファイル名.exe でしたが、 複数ファイルがあるとわかりにくいので、明示的に実行可能ファイル名をつけると良いでしょう。
> link advapi32.lib test.obj username.obj /OUT:test.exe
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.

コードの最適化
よく使うオプションには次のものがある。
– 最適化オプション (/O1 コンパイラオプション)
– 警告レベルの指定 (/W<警告レベル> コンパイラオプション)
より望ましいコーディングができることをコンパイラが検出した場合、それを警告として出力させる(/w4)
– Unicode ビルド (/DUNICODE, /D_UNICODE)
/DUNICODE を指定することによって GetUserName はコンパイラによって GetUserNameW として解釈され、指定しなければ GetUserNameA として解釈される
– デバッグ情報の生成
PDB (プログラム・データベース, シンボルファイルとも言います) 及び map ファイルを生成。ビルドを作ったら、EXE ファイルと共に PDB ファイルも保管。
– ターゲット Windows バージョン指定
 Windows API の中には Windows のバージョンによって使えるもの、使えないものがあので、ターゲットバージョンの指定が必要になる事がある。
> cl /c /D_WIN32_WINNT=0x0600 test.cpp
Windows Server 2008 0x0600
Windows Vista 0x0600
Windows Server 2003 SP1, Windows XP SP2 0x0502
Windows Server 2003, Windows XP 0x0501
Windows 2000 0x0500

リンクオプションまとめ
プログラムの開発中
C:\Temp> cl /c /W4 /Zi /DUNICODE /D_UNICODE test.cpp
リリース時には最適化オプションも有効に
C:\Temp> cl /c /W4 /Zi /O1 /DUNICODE /D_UNICODE test.cpp

カテゴリー: C++ タグ: , , パーマリンク