コンパイル結果をアウトプット枠へNo.00181
こさく さん 11/04/28 18:01
 
お世話になっております、こさくと申します。

早速ですが表題についてお教え頂ければと思います。
ルネサスのmakefileを使ったコンパイルをするバッチファイルをマクロで実行さ
せています。

マクロ全文
$dir = "D:\\MyDocuments\\Main\\Make\\";
$exe_bat = "m.bat";
$err_file = "err";
runex $dir + $exe_bat, 1, 0, "", 0, "", 0, "", 4, "", 1, 0, 0;
if ( !result )  {
 message "起動に失敗しました";
} else {
 openfile $dir + $err_file;
}
ここまで。

m.bat は環境変数設定を行い *.bak を消去するなどした後に
hmake Main_Debug.mak > err
を実行しています。

コンパイルは、出来ていますし、エラー内容も秀丸上で確認できますので問題は
ないのですが、エラー内容をアウトプット枠へ出したいという欲が出てきました。

以下試したこと
・バッチファイルに type err を入れて、runexのパラメータを色々
・err へのリダイレクトを止めて、runexのパラメータを色々
・ファイルメニューの「プログラム実行」でバッチ実行、オプション色々

いずれもアウトプット枠へ出力されるのは、環境変数設定等のメッセージだけで
した。他に何か良い方法がありましたらご教示頂ければ幸いです。

以上よろしくお願いします。

[ ]
RE:00181 コンパイル結果をアウトプット枠No.00182
秀まるお さん 11/04/29 15:35
 
 アウトプット枠にリダイレクトさせる方法は僕も今ちょっとやってみた限りは
うまくいきせんでした。

 とりあえず別の方法として、アウトプット枠に文字列出力する関数を使って処
理する方法があると思います。

 とりあえず簡単にテストした例ですが、

    #filesys = createobject("Scripting.FileSystemObject");
    #file = callmethod_returnobj( #filesys, "OpenTextFile", "e:\\temp.txt", 1);
    $out = callmethod_returnstr( #file, "ReadAll" );
    loaddll "HmOutputPane.dll";
    #n = dllfunc("Output", hidemaruhandle(0), $out);

 のようなマクロでアウトプット枠にファイル内容を入れることが出来ました。
バッチファイル側では何かのファイルに出すようにしておいて、マクロの最後で
上記のような処理をする作戦でもいけるんじゃないかと思います。

[ ]
RE:00182 コンパイル結果をアウトプット枠No.00183
こさく さん 11/05/02 09:36
 
ご連絡遅くなりました、こさくです。
どうもありがとうございます。出来ました。

ただ、ここで一つ課題が出てしまいました。
以下のようなファイルを出力して、アウトプット枠にでるのですがダブルクリッ
クで当該位置へジャンプしようとするとファイルが見つかりません。
..\Main\Src\\abc.c(293) : C2300 (E) Case not in switch

どうやら、マクロディレクトリからの相対位置になっているようです。
$dir = "D:\\MyDocuments\\Main\\Make\\";
ここからの相対位置にするにはどのようにしたら良いでしょうか。

お手数をお掛けいたしますが、よろしくお願いします。

[ ]
RE:00183 コンパイル結果をアウトプット枠No.00184
秀まるお さん 11/05/02 11:35
 
 runex文の第7、第8パラメータにて、いわゆるカレントディレクトリが指定
出来るようです。それを使ってやれば、コンパイラの生成するパス名が、うまく
目的のフォルダからの相対パスにすることが出来るんじゃないかと思います。

 それでもしダメだとしたら、コンパイラの出力するパス名を無理矢理置換する
方法も一応出来るかと思います。無理矢理置換するとしたら、

    $out = callmethod_returnstr( #file, "ReadAll" );

 の後に、たとえば

    loaddll "HmJre.dll";
    $rep = dllfuncstr("ReplaceRegular"
            , "\\.\\.\\\\"
            , $out
            , 0
            , directory + "\\"
            , 1 );
    if( $rep != "" ) {
        $out = $rep;
    }

 のような処理で置換することが可能だと思います。

[ ]
RE:00184 コンパイル結果をアウトプット枠No.00185
こさく さん 11/05/02 13:13
 
こさくです。

どうもありがとうございました。出来ました。

loaddll "HmOutputPane.dll";
#ret=dllfunc("Push",hidemaruhandle(0));
#n = dllfunc( "Output", hidemaruhandle(0), $out );
こうすることで、アウトプット枠への出力が累積しないで最後の文字列だけが出
るようにもなりました。

いつもどうもありがとうございます。

[ ]