§ 21.7. 起動例
§ 21.7.1. 対話環境
対話環境を起動する最も簡単な方法は,ただsmlsharpコマンドを 実行することである.
$ smlsharp
SML#の対話環境からあるCライブラリの関数を対話的に利用したい 場合,そのライブラリの名前を-lオプションで指定する. 例えば,対話環境からzlibライブラリを呼び出したいときは 以下のコマンドを実行する.
$ smlsharp -lz
C標準ライブラリやPOSIXスレッドライブラリなど, SML#コンパイラがデフォルトで リンクするライブラリは-lで指定しなくても利用できる.
§ 21.7.2. バッチコンパイル
ファイルに書かれたSML#プログラムをコンパイルする場合, もしただひとつの.smlファイル(および対応する.smiファイル)のみ から成るプログラムならば,その.smlファイルをただ指定するだけで実行 形式ファイルを得ることができる.
$ smlsharp foo.sml
実行形式ファイルの名前をa.outから変えたいときは-oオプ ションを指定する.
$ smlsharp -o foo foo.sml
§ 21.7.3. 分割コンパイルとリンク
複数のファイルから成るSML#プログラムをコンパイルおよび リンクする標準的な手順は以下の通りである.
$ smlsharp -c -O2 foo.sml $ smlsharp -c -O2 bar.sml $ smlsharp -c -O2 baz.sml $ smlsharp foo.smi
まず,SML#プログラムを構成する各.smlファイルを -cを付けたsmlsharpコマンドでそれぞれ独立かつ順不同に コンパイルする. foo.smlのコンパイルに成功すると, オブジェクトファイルfoo.oが生成される. 全ての.smlファイルのコンパイルが完了した後, プログラム全体のエントリとなるコードを持つ.smlファイルのインターフェース ファイル(ここではfoo.smi)をsmlsharpコマンドに指定し, プログラム全体をリンクする. このときsmlsharpコマンドは,foo.smiから_require宣言 で辿れる.smiファイルを全て列挙し,拡張子を.oに変え,リンク対象の オブジェクトファイルのリストを得る. ソースツリーの管理の都合などにより.smiファイルから.oファ イルへの対応を制御したい場合は,以下の例のように, ファイル名の対応表を持つファイルを作り-filemapオプションで指定する.
$ smlsharp -c -O2 -o obj/foo.o foo.sml $ smlsharp -c -O2 -o obj/bar.o bar.sml $ smlsharp -c -O2 -o obj/baz.o baz.sml $ smlsharp -filemap=objmap foo.smi
このとき,objmapの内容は以下の通りである.
foo.sml obj/foo.o bar.sml obj/bar.o baz.sml obj/baz.o
SML#プログラムは任意のC/C++プログラムやライブラリとリンクする ことができる. SML#プログラムをC/C++プログラムとリンクする場合は, リンク時のsmlsharpコマンドラインにリンクするC/C++のオブジェクト ファイルやライブラリファイルを列挙する. 例えば,独自のCプログラムutil.cとOpenGLを利用するSML#プ ログラムfoo.smlをコンパイル・リンクする場合は以下のようにする.
$ smlsharp -c -O2 foo.sml $ cc -c -O2 util.c $ smlsharp foo.smi util.o -lgl -lglu
§ 21.7.4. Makefileの雛形の生成
-MMおよび-Mlオプションを用いて,複数のファイルから なるプログラムのコンパイルのためのMakefileの雛形を生成することができる. 以下の例は, 前掲したfoo.sml,bar.sml,baz.smlを コンパイル・リンクするMakefileの雛形を生成する例である.
$ smlsharp -MMl foo.smi > Makefile $ smlsharp -MM foo.sml bar.sml baz.sml >> Makefile
生成されたMakefileには依存関係しか書かれていない. コンパイルおよびリンクを行うsmlsharpコマンドラインを 追加することでMakefileが完成する.