コマンドラインからコンパイル

Visual Studioをインストールすると、clというコンパイラ&リンカがインストールされ、nmakeというmakeプログラムもインストールされる。そしてこれらは基本的にコマンドラインからも使えるはずなのだが、clやnmakeにパスを通したくらいでは、ライブラリなどの各種パスが設定されていないので、そのままでは使用できない(と思う)。

startcl.cmd

この設定を一括で行ってくれるバッチスクリプト北陸先端科学技術大学院大学の小林智也氏が公開してくれているので、これを使うとclやnmakeが使え、コマンドラインからのシンプルな開発が可能になる。

このバッチファイルは、VisualStudioのインストール環境を覗いてくれ、そこから環境変数のPATH, INCLUDE, LIBを指定してくれるようです。

vcvarsall.bat

(2008-02-14 追記)id:w-a_k-a_p-o_nさんに教えていただいたコメントを参考にして調べてみたら、上記startcl.cmdと同様のこと、つまり「Visual C++ ツールセットをコマンド ラインから有効にする」ことができるようです。
自分の環境の場合「C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat」にありました。このバッチファイルに与える引数を切り替えることで、64bit用のコンパイルも出来るようになります。
Microsoft謹製ですし、startcl.cmdより、こちらのほうが良いかもしれません。

makefileを書いてみる

上記のstartcl.cmdかvcvarsall.batを実行して環境を整えたら、テストプログラムを書いてコンパイルしてみます。
このサイトを参考にさせていただきました。

  • test.c
#include <stdio.h>

int main(void){
	printf( "hoge\n" );
	return 1;
}
# マクロ定義.
TARGET = test1.exe
CC = cl
CFLAGS = -nologo -Wall
LDFLAGS = -nologo -out:$(TARGET)

# ルール.
.c.obj:
	$(CC) $(CFLAGS) /c $<

all : $(TARGET)

$(TARGET) : test.obj
	$(CC) test.obj -link $(LDFLAGS)

clean : 
	-del -f *.obj *.exe

これらのファイルを置いたディレクトリで nmake を実行してみると、無事コンパイルされ、test1.exe が生成されました。
ただ一つ次の警告が表示されます。

C:\Program Files\Microsoft Visual Studio 8\VC\include\stdio.h(360) : warning C42
55: '_get_printf_count_output' : 関数プロトタイプがありません : '()' を '(void)'
 に変換します。
        cl test.obj -link -nologo -out:test1.exe

MSDNの記述を読むと、stdio.hをincludeしておけば大丈夫そうな気もするのですが、ちょっと不明だしエラーではないので今は保留。(ホントは知りたいし、消したいワーニング。。)