npt for Windowsのコンパイル方法
以前の投稿でnpt-windowsのバイナリを配布しました。
nptのWindows版を公開します - nptclのブログ
ウィルスというか、トロイの木馬報告もされました。
npt64.exeのウィルス検出について - nptclのブログ
ここでは手動でnpt-windowsをコンパイルする方法について説明します。
作者はVisual Studio 2017を使って確認しています。
まずはソースを用意してください。
このリポジトリに、Windows用のソースも含まれています。
場所は下記の通り。
npt/develop/windows/.
コンパイルは、下記の値をdefine
します。
LISP_WINDOWS
LISP_TERME
LISP_WINMAIN
FreeBSDとLinuxでコンパイルする場合は、LISP_TERME
がデフォルトで指定されます。
しかしWindowsの場合は、LISP_STDIN
がデフォルトです。
上記のようにLISP_WINDOWS
とLISP_TERME
を両方指定することで、
Windowsアプリケーションを作成することができます。
このモードでコンパイルする場合は、Windows用のソースを追加で指定する必要があります。
ソースは下記の場所に存在します。
develop\windows
上windows_*.c
windows_*.h
ビルド用のMakefileではincludeパスとソースパスを指定しているため
場所を意識する必要はありませんが、
手動で実行する場合は自分で何とかしなければいけません。
色々と方法はあると思いますが、
npt
のソースファイル一式と、上記のWindows用ソースを
一か所にまとめるとコンパイルしやすいかと思います。
Windowsアプリケーションとしてコンパイルする場合は、
コンソール画面を表示しないようにする必要があります。
設定は次の2つにて行います。
LISP_WINMAIN
をdefineするLINK.EXE
に/SUBSYSTEM:WINDOWS
を指定する
コンパイルの例を示します。
まずはCL.EXE
とLINK.EXE
を利用できる状態にしてください。
カレントディレクトリに、npt
のソースとWindowsのソースが存在しているものとします。
まずはコンパイルを行います。
> CL.EXE /C /DLISP_WINDOWS /DLISP_TERME /DLISP_WINMAIN *.c
コンパイルが成功すると、obj
ファイルが生成されます。
次にリンクを行います。
> LINK.EXE /OUT:npt.exe *.obj Shell32.lib User32.lib Gdi32.lib /SUBSYSTEM:WINDOWS
ライブラリは、次の3ファイルを指定する必要があります。
Shell32.lib
User32.lib
Gdi32.lib
正常に実行された場合は、npt.exe
が出力されます。
生成されたnpt.exe
は通常のWindowsアプリケーションなので、
実行するとウィンドウが表示されます。
コンパイルのためのスクリプトも用意しています。
build
ディレクトリ上をご確認ください。
- 構築スクリプト
windows_terme_debug.bat
windows_terme_release.bat
- Makefile一式
Makefile.windows_terme_debug
Makefile.windows_terme_release
- Visual Studio 2017用
vs2017_terme_debug64.bat
vs2017_terme_release64.bat