自動処理の作成
必要なツールができ上がったら、コンパイル~エディタ起動~再コンパイル──という、自動処理を作っていきます。DOSではバッチファイル、UNIX系OSではシェルスクリプトを使います。
DOS版バッチファイル
yesno.exeを使用するDOS版のバッチファイル“CMK.BAT”はリスト2のようになります。アンダーラインの箇所は、適宜書き換えてください。エディタには「メモ帳」(NOTEPAD.EXE)を指定しています。ここも自由に書き換えて構いません。
以下のように実行します。
CMK <ソースファイル名>
<ソースファイル名>には拡張子は付けません。また、パスも不要で、バッチファイル内で指定したフォルダ(例では“C:\CLANG\SRC”)にソースファイルが存在するという前提になっています。
ex1301.cをコンパイルするなら
CMK ex1301[Enter]
とします。成功すればバッチファイル内で指定したフォルダ(例では“C:\CLANG\EXE”)に実行ファイル(例では“ex1301.exe”)が生成されます。エラーがあればエディタが起動し、ソースと同じフォルダ(例では“C:\CLANG\SRC”)に生成されたエラーメッセージを記録したファイル(例では“ex1301.err”)が開きます。
これを参照してソースファイルを修正し保存すると、「再コンパイルしますか? <y/n>」というメッセージが表示されるので、[Y][Enter]と入力すれば修正したソースファイルが再コンパイルされ、[Y]以外の文字を入力すれば処理は終了します(再コンパイルは行われません)。
なお、メモ帳ではタグジャンプが使えないため、エラーメッセージからソースファイルを開いて該当する行にカーソルを移動……という処理は行えません。タグジャンプ機能を搭載したDOS版のエディタをお奨めします。
リスト2:コンパイル・エラー修正・再コンパイルを自動実行するバッチファイル~(CMK.BAT)
ECHO OFF
CLS
IF [%1] == [] GOTO ERR
:START
ECHO %1 コンパイル中...
LCC -j -oC:\CLANG\EXE\%1.EXE C:\CLANG\SRC\%1.C > C:\CLANG\SRC\%1.ERR
IF ERRORLEVEL 1 GOTO EDIT
GOTO SUCCESS
:EDIT
C:\WINDOWS\SYSTEM32\NOTEPAD.EXE C:\CLANG\SRC\%1.ERR
↑エディタは適宜書き換えてください
YESNO 再コンパイルしますか?
IF ERRORLEVEL 1 GOTO EXIT
GOTO START
:SUCCESS
ECHO コンパイルは成功しました!
GOTO EXIT
:ERR
ECHO CMK : ファイル名を指定してください。拡張子は不要です。
:EXIT
Windowsならもっとシンプルに
Windowsのコマンド プロンプトから実行する場合は、リスト3のような“CMKW.BAT”が便利です。Windows環境ではGUI版のエディタでソースファイルを開いたままにしておき(もちろん内容を保存して)、このバッチファイルを動かします。
コンパイルでエラーが発生すればコマンド プロンプトに「再コンパイルしますか? <y/n>」というメッセージが表示されるので、エディタに移動してエラーメッセージを保存した<ソースファイル名>.errファイルを開き、タグジャンプ機能でソースを修正して保存します。
そこでコマンド プロンプトに戻って[Y][Enter]と入力すれば再コンパイルが始まります。コマンド プロンプトとGUI版のエディタを切り替えて使えるため、このようなシンプルな形になります。
リスト3:Windows環境用(CMKW.BAT)
ECHO OFF
CLS
IF [%1] == [] GOTO ERR
:START
ECHO %1 コンパイル中...
LCC -j -oC:\CLANG\EXE\%1.EXE C:\CLANG\SRC\%1 > C:\CLANG\SRC\%1.ERR
YESNO 再コンパイルしますか?
IF ERRORLEVEL 1 GOTO EXIT
GOTO START
:ERR
ECHO CC : ファイル名を指定してください。拡張子は不要です。
:EXIT
UNIX系OSのシェルスクリプト
LinuxなどUNIX系OSでGCCを使用する場合は、リスト4のようなシェルスクリプト“cmk”を使ってください。ソースはホームディレクトリのsrcに保存します。
エディタは“emacs”としてありますが、自由に書き換えてください。なお、シェルにはshを使っています。シェルが異なるとシェルスクリプトの文法も変わるため、注意してください。
リスト4:UNIX系OS用のシェルスクリプト~(cmk)
#! /bin/sh
if [ "$1" = "" ]
then
echo "usage:cmk <filename>"
exit 1
fi
# Compile the source file
status=0
gcc $HOME/src/$1.c -o $HOME/src/$1 > $HOME/src/$1.err
status=$?
while [ $status != 0 ]
do
# Display prompt and waiting for user's answer 'y' or 'n'
yesno "Edit and re-compile, ok?"
if [ $? = 0 ]
then
emacs $HOME/src/$1.c $HOME/src/$1.err
↑エディタは適宜書き換えてください
gcc $HOME/src/$1.c -o $HOME/src/$1 > $HOME/src/$1.err
status=$?
else
status=0
fi
done
echo "cmk : terminated."
|