WindowsでのコマンドコンパイルとMakefile


一般的にプログラムコンパイルでは、C、C++にかかわらず、まずソースファイルを中間コードファイルにコンパイルし、Windowsの下では.Objファイル(UNIXでは.oファイル)、すなわちObject Fileという動作をコンパイル(compile)といいます.その後、大量のObject Fileを合成して実行ファイルを合成します.この動作をリンク(link)と言います.
NMAKE(MicrosoftProgram Maintenance Utility)のコマンドライン構文makefileの構成部分には、記述文(description block)、inference rules(導出ルール)、マクロおよび命令が含まれます.(directive).記述文はdependent linesとcommand linesの組合せであり、inference rulesは予め定義されているか、ユーザー自身が定義した依存関係と関連命令であり、マクロは言うまでもないだろう.命令は内定したNMAKEに認識される制御命令であり、多くの有用な機能を提供している.
makefileのコマンドは[Tab]で始まる、main.cppでaddを用いる.cppの関数.
main.exe:main.obj add.obj
	link main.obj add.obj
main.obj:main.cpp add.h
add.obj:add.cpp
注意:コマンドlinkの前に必ず[Tab]スペースがあります.
VCテープのコンパイラ名はcl.exeで、標準ライブラリに関連するいくつかのオプションがあります:/ML、/MLd、/MT、/MTd、/MD、/MDd.これらのオプションは、コンパイラ・アプリケーションがどのバージョンのC標準ライブラリを使用するかを示します./ML(デフォルトオプション)は、単一スレッドの静的バージョンに対応する標準ライブラリ(libc.lib);MTはマルチスレッド静的版標準ライブラリ(libcmt.lib)に対応し、コンパイラは自動的に定義します.MTマクロ;/MD対応マルチスレッドDLL版(インポートライブラリmsvcrt.lib、DLLはmsvcrt.dll)、コンパイラ自動定義_MTと_DLL 2マクロ.後でdを追加するオプションは、コンパイラに自動的に1つ以上定義されます.DEBUGマクロは、対応する標準ライブラリのデバッグ版を使用することを示すため、/MLdはデバッグ版単一スレッド静的標準ライブラリ(libcd.lib)/MTdはデバッグ版マルチスレッド静的標準ライブラリ(libcmtd.lib)/MDdはデバッグ版マルチスレッドDLL標準ライブラリ(ライブラリmsvcrtd.libをインポートし、DLLはmsvcrtd.dll)に対応する. 
clコマンドのいくつかの一般的なパラメータについて:
/D定義マクロ
/Odはコンパイラをしないで、一般的にデバッグに便利です
/Ziデバッグ情報を含む
/Zp? 疑問符は数字を表し、デフォルトの位置合わせを表す.例えばZp 1はZp 8を1バイトで位置合わせする.ここで、位置合わせはプログラムで以下のように使用できる.
//      
#pragma pack(push, 8)
/*         */
#pragma pop(pop)

.batバッチコマンド構文は参照可能http://hi.baidu.com/epeak/blog/item/29774c8116cd03d1bd3e1efd.html
参考『Makefileを一緒に書いてくれ』