2010年1月14日木曜日

makeでトラブル・・・

こないだの液晶付きマイコンボードを少しだけ触りました。
makeでちょっとトラブったので覚え書きしておこうと思います。

コンパイルは、統合開発環境の「C17WB for Interface」(以下、C17WBIF)というソフトを使います。これ「eclipse」ですよね。ソフト起動中のスプラッシュスクリーンでわかります。eclipseは初めて使うツールです(^^;
image

ここのサイトから、サンプルコードがダウンロードできます。サンプルコードは5つあって、LCDのテスト用コードでしばらく勉強しようと思います。


■makeに失敗する
このサンプルコードをC17WBIFを使ってmakeしようとしたのですが、「パソコンによって、makeが成功したり失敗したり」するという問題にぶち当たりました。
VAIO TYPE-FWでは、makeが成功し問題ありませんでした。しかし、数年前に自作したPCではmakeに失敗します。必ず失敗というわけでは無く、たまーに成功するときがある。なんじゃそれw

<エラーコード>

C:/EPSON/C17WBIF/rm -f boot.o init.o lcd.o main.o font.o osc1timmer.o stopwatch.o pw_booster_wait.o  \
    && \
    for NAME in boot.o init.o lcd.o main.o font.o osc1timmer.o stopwatch.o pw_booster_wait.o  ; do \
        C:/EPSON/C17WBIF/cp -pf obj1pass/$NAME $NAME ; done \
    && cmd /c "rd /s /q obj1pass"
ディレクトリが空ではありません。
make: *** [LCD_Test.elf] Error 145


エラーコードを見てみると、コードのエラーでは無く、ファイル操作で失敗してそう・・・。
コマンドプロンプトの「rd」コマンドは、オプションの「/s」が付いていれば、削除対象ディレクトリにファイルやフォルダが存在していても削除可能なはずですが、「ディレクトリが空ではありません。」と出てしまいます。

原因がよくわかりませんが、なんとなくコピーコマンド「cp」と、削除コマンド「rd」の間にWaitをかましてみると、無事にmakeに成功しました。
Waitさせる方法がわからないので、Webで調べてみると、「自分自身にpingを送信してやるとWaitの代わりになる」とのことで使ってみました。待ち時間は多め(?)に3秒にしようと思い、pingを3回送信しています。
でも、結局使用するPCはVAIOなんで、この対策は不要そうですね(^^;

<Makefile>

変更前

# restore 1pass object files
    $(RM) -f $(OBJS) \
    && \
    for NAME in $(OBJS) ; do \
        $(CP) -pf obj1pass/$$NAME $$NAME ; done \
    && cmd /c "rd /s /q obj1pass"

変更後

# restore 1pass object files
    $(RM) -f $(OBJS) \
    && \
    for NAME in $(OBJS) ; do \
        $(CP) -pf obj1pass/$$NAME $$NAME ; done
    ping localhost -n 3 > nul
    cmd /c "rd /s /q obj1pass"



■備考
下記は他人のPCで発生した内容です。
make実行中、「”cmd” not found」とエラーが出て、makeが中断してしまいました。
これは、環境変数のPATHの値が足りてないのが原因で、次のPATHを追加すると行けました。
PATH=%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem

関連記事:


0 件のコメント:

AddThis