Index > Adobe FrameMaker FDK 8.0 API Client を nmake を使ってコマンドプロンプトでビルドする方法
Wed, September 9, 2009

Adobe FrameMaker FDK 8.0 API Client を nmake を使ってコマンドプロンプトでビルドする方法

FDK 8.0(FrameMaker Developer Kit を使って作成するAPI Client はVisualStudio2005 の使用してビルドする。
通常、VisualStudio2005 は GUI上で開発・ビルドを行うが、 わたしがつくっている程度の小さなC/C++プログラムでは、わざわざGUIを起動するのが面倒。

面倒というより、そもそもコーディングも vim でやっているので、ビルドするためだけに VisualStudio2005 の重いGUIを起動していることになる。
ビルドするだけなら、コマンドラインでMakeで済ませたい、と思って調べたところ、 標準でインストールされるVisualStudio2005 コマンドプロンプトを使って namke(というMicrosoftが提供している) make ツールを使えばよいことが判明。

VisualStudio2005をインストールすると一緒にインストールされる VisualStudio2005 コマンドプロンプトは、通常のDOSプロンプトと異なり あらかじめ C++ プログラムをビルドするのに必要な環境がセットアップされている。

VisualStudio2005 コマンドプロンプト と nmake を使って API Clientを作成

前提

ちなにみFDK8 のデフォルトインストール先は、以下の通り。

パスが長いと入力が面倒なので、 今回は、C:\Adobe\FDK8 という指定が簡単な場所にインストールしました。 (インストール先に応じて読みかえてください。)

確認事項

FDK8を使って、API Client をビルドするための追加設定。

nmake 用 Makefile の作成

以下の内容の Makefile を foo.c と同じディレクトリに作成。

myname = foo
mysrc  = $(myname).c
myobj  = $(myname).obj
mydll  = $(myname).dll

fdk = c:\Adobe\FDK8
fdklib  = $(fdk)\lib
fdkinc  = $(fdk)\include

cc     = cl
link   = link
rm     = del

cflags  = /nologo /O2 /ERRORREPORT:PROMPT /D "NDEBUG"
libs    = fdk.lib api.lib fmdbms32.lib  kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib


$(mydll) : $(myobj)
    @$(link) $(myobj) /OUT:"$(mydll)" /INCREMENTAL /NOLOGO /LIBPATH:"$(fdklib)" /DLL /SUBSYSTEM:WINDOWS /MACHINE:X86 /ERRORREPORT:PROMPT $(libs)

$(myobj) : $(mysrc)
    @$(cc) $(cflags) -I"$(fdkinc)" -c $(mysrc)


clean :
    @$(rm) *.obj
    @$(rm) *.dll
    @$(rm) *.ilk
    @$(rm) *.lib
    @$(rm) *.exp

cl.exe や link.exe のオプション指定方法に関する情報が少なかったので、 完全にこれで正しいのかどうか...一応 DLLは作成できましたが。

VisualStudio のIDEで、【プロジェクト - プロパティ】で表示ダイアログ内のツリーに コマンドプロンプトというノードがあるので、そこをクリックすると、 現在の設定で、 cl.exe や link.exe にどういうオプションを与えて起動しているかがわかります。

今回はそれをみながら必要とおぼしきものを拾ってきた次第。

ビルド

  1. VisualStudio2005 コマンドプロンプトを起動
  2. foo.c のあるディレクトリまで移動
  3. nmake

以上です。

 Twitter
follow me on Twitter
 Categories