☆1つのソースファイルから実行ファイルを作る lcc source.c
今まではこの方法コンパイルしてきました。もっとも基本的な使い方です。
コンパイルに続いてリンクも行います。
☆複数のソースファイルから実行ファイルを作る lcc source1.c source2.c source3.c
複数個の場合でもソースファイルを並べて指定するだけです。
この場合、それぞれコンパイルされて source1.obj、source2.obj、source3.obj の3つのオブジェクトファイルを作り、それらをリンクして1つの実行ファイルになります。
なお、作成される実行ファイルの名前は一番最初に指定されたソースファイル名からとります。この場合は、source1.exe という名前で実行ファイルができます。
☆ファイル名を指定して実行ファイルを作る lcc -o test.exe source1.c source2.c
オプション -o を指定すると作成される実行ファイルのファイル名を変えられます。
この場合は、 test.exe となります。
☆コンパイルのみ行いリンクしない lcc -c source1.c source2.c
オプション -c を指定するとコンパイルを行うだけでリンクはしません。
上の場合は source1.obj と source2.obj が作成されますが、実行ファイルは作成されません。
☆オブジェクトファイルから実行ファイルを作る lcc source1.obj source2.obj
オブジェクトファイルだけでもソースファイルと同じように扱えます。本来これはリンカの役割ですが、リンカのみを使おうとするとリンカの使い方も知らないといけないので、このようにコンパイラを通してリンクをしたほうが分かりやすくなります。
☆アセンブリファイルを出力する lcc -S source1.c
オプション -S を指定してコンパイルするとアセンブリファイルが出力されます。また、オプション -SC を指定すると変換前のソースコードがコメントとして挿入されるのでどのように変換されたかわかりやすくなります。
このファイルはテキスト形式なのでソースファイルと同じようにメモ帳などのエディタで編集可能です。アセンブリファイルの書式については高度の知識が必要なので説明しません。
* 興味がある方はエル・エス・アイジャパンのサイト内、フリーソフトウェア集にある「r86,lldオンラインマニュアル」を参考にしてください。
4.大きなプログラムを作るときには
# a.c , b.c , c.c から prog.exe をつくる
prog.exe : a.obj b.obj c.obj
lcc -o prog.exe a.obj b.obj c.obj
a.obj : a.c mydefs.h
lcc -c a.c
b.obj : b.c mydefs.h
lcc -c b.c
c.obj : c.c
lcc -c c.c
makefile は他のソースファイルと同じフォルダにおいて下さい。さて、これで準備完了です。MS-DOSプロンプト上で次のようにタイプして下さい。
make
これだけで自動的にコンパイル、リンクが行われエラーがなければ prog.exe ができあがります。もしここで c.c だけを更新して make すれば c.c だけコンパイルされリンクが行われるでしょう。
さて、makefile の中身について説明します。まず、# で始まる行はコメントです。次の2行で一つの固まりです。この固まりはこのようになっています。
ターゲット : ソース1 ... ソースn コマンド |
# a.c , b.c , c.c から prog.exe をつくる(省略した場合)
prog.exe : a.obj b.obj c.obj
lcc -o prog.exe a.obj b.obj c.obj
a.obj b.obj : mydefs.h
a.obj b.obj c.obj をコンパイルする手順が省略されていますね。make はこのようなとき、フォルダの中に a.c b.c c.c があるかどうかを調べ、もしあれば「lcc -c a.c」のようなコマンドを自動的に追加します。
「a.obj b.obj : mydefs.h」の行は a.obj,b.obj つまり a.c,b.c が mydefs.h の更新を反映させることを認識させるために省略はできません。
[ 例 ] makeをつかってプログラムを作る例 maketest.c + 3 files
今回は内容的に難しいところが多かったと思いますが、実用的な面で考えると覚えておいて損はありません。特にプリプロセッサの機能はこれからも必ずといっていいほど使うのでしっかりマスターしましょう。