K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]

新規投稿 | 開設者ホームページへ戻る | ヘルプ

[1144] makeファイル中のリダイレクト
投稿者:tos
2008/08/26 10:27:15

皆さんこんにちは、tosです。 makeファイル中で以下のように リダイレクトを要求するexeを実行したいのですが、 正常に実行できません。 ------------------------------------------- FILE1.HOGE : FILE2.PIYO Hoge.exe FILE1.HOGE < FILE2.PIYO ------------------------------------------- 「正常に実行できません」の内容は、最初エラー メッセージのみでわからなかったんですが、 ためしに、上記の2行目をBAT呼び出しにしたところ、 下記のように何故かリダイレクト起動に前に'0'が 付加されていました。 ------------------------------------------- Hoge.exe FILE1.HOGE 0<FILE2.PIYO ------------------------------------------- この'0'は何故付加されるのでしょうか? ちなみに、makeは「BorlandのVersion 5.2」 を使用しています。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1145] Re:makeファイル中のリダイレクト
投稿者:774RR
2008/08/26 12:26:34

cat > Makefile <<EOF file1.txt: file2.txt hoge <tab>./hoge file1.txt < file2.txt hoge: hoge.c EOF ということで GNU make で試したけど無問題っす (HPUX11.11 と cygwin) borland の make ではなく GNU make で試してみませう 某の make がどうしてもいい、ってことなら 俺の Makefile のように 8.3 コンパチなファイル名で試してみること推奨
[この投稿を含むスレッドを表示] [この投稿を削除]
[1146] Re:makeファイル中のリダイレクト
投稿者:tos
2008/08/26 12:45:39

返信ありがとうございます。 GNU makeで試してみます。 ただ、 >俺の Makefile のように 8.3 コンパチなファイル名で試してみること推奨 この意味がわかりませんので、よろしければ教えてください。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1147] Re:makeファイル中のリダイレクト
投稿者:774RR
2008/08/26 13:42:30

むかしむかし、あるところに MS-DOS というものがあってのぉ MS-DOS ではファイル名に「8文字以下 ドット 3文字以下」しか使えなかったのぢゃ その関係でなぁ、 Win95 以後のソフトでも8文字ドット3文字のファイル名しか 扱えないような、そーいう過去互換性重視なモノもあったのぢゃよ # 某の make がそういう過去互換重視なものかどうかは知らんがのぉ hoge.exe は4文字ドット3文字だから問題ない file1.txt は5文字ドット3文字だから問題ない のぢゃが file1.hoge や file2.piyo は5文字ドット4文字なのでな、 過去互換性重視なソフトに取っては非互換なファイル名なのぢゃよ file1.hoge ではなく hoge1.txt みたいに8文字ドット3文字以下の 過去互換性重視なファイル名に変えてみると良いかもしれん、ということぢゃ 直るかもしれんし、直らんかもしれん。どっとはらい。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1148] Re:makeファイル中のリダイレクト
投稿者:774RR
2008/08/26 13:51:52

ちなみに GNU make はソースコード提供なので開発環境がないと作れない make 自体は開発環境の一部であり、これがうまく動かないのではコンパイルできない という自己矛盾の状況に陥るわけだ。 cygwin 開発環境一式持ってくるほうが結局面倒が無いかも知れんっす。 そーすると gcc コンパイラ自体も入手できちゃうので某の出番は無い可能性が・・・ 掲示板のスペースで cygwin の解説など不可能っぽいので http://journal.mycom.co.jp/special/2002/cygwin/index.html
[この投稿を含むスレッドを表示] [この投稿を削除]
[1149] Re:makeファイル中のリダイレクト
投稿者:tos
2008/08/26 14:25:45

>file1.hoge ではなく hoge1.txt みたいに8文字ドット3文字以下の >過去互換性重視なファイル名に変えてみると良いかもしれん、ということぢゃ >直るかもしれんし、直らんかもしれん。どっとはらい。 理解できました。ありがとうございました。 引き続き試してみます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1150] Re:makeファイル中のリダイレクト
投稿者:tos
2008/08/28 10:00:12

cygwin をインストールして確認しましたが、 やはり、Borlandのmakeと同じ結果でした。 確認方法は、下記のようなmakefile及び バッチファイルを用意して、 (ダミーの"source.dat"と"app.exe"も用意して) --- makefile -------------------- target.dat : source.dat test.bat --------------------------------- --- test.bat -------------------- app.exe target.dat < source.dat --------------------------------- cygwin上?でmakeを実行しました。 すると、やはり'<'の前に'0'が付加されます。 --------------------------------- $ make test.bat app.exe target.dat 0<source.dat ~ --------------------------------- 何故でしょうか? 環境は、下記です。 GNU make 3.81 Windows XP Professional Version 2002 Service Pack 2
[この投稿を含むスレッドを表示] [この投稿を削除]
[1151] Re:makeファイル中のリダイレクト
投稿者:774RR
2008/08/28 13:29:05

標準入力のリダイレクトは < で行うのですがこれは本来 0< の略記なのです。 http://itpro.nikkeibp.co.jp/article/COLUMN/20060228/231093/ たとえば un*x のコンソール上では $ cat hoge.txt Hoge! $ cat 0<hoge.txt Hoge! $ // と、このように同じ動作をするのが正常な動きでありんす。 んで XP/2000 のコマンドプロンプトである cmd.exe もこの表記を受け付けます。 D:\MYWORK>cat 0<hoge.txt Hoge! D:\MYWORK> なので app.exe target.dat 0<source.dat は本質的に正しい入力であって、 期待したとおりに動くはずです。実際俺のところでは cmd.exe bash.exe の両方で このように0<と手入力しても期待通りの正しい動きをします。 さてここまで納得していただけたでしょうか。この例の場合、バッチファイル中には < としか書いていないリダイレクト記号を、誰かが勝手に (make がやっているのか cmd.exe がやっているのか、他の誰かかは不明) 0< と置換しているわけです(実害ないけど妙なことをやってるよね・・・) 0< となっていても俺んとこでは期待通り動作しています。 なので 0< となるのは「実行できない」の原因ではないと思われまっする。 「実行できない」の詳細について記載がないのでこれ以上の判断は出来ません。 本体プログラム側のバグを疑ってください。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1152] Re:makeファイル中のリダイレクト
投稿者:tos
2008/08/28 15:01:40

返信、ありがとうございます。 >なので app.exe target.dat 0<source.dat は本質的に正しい入力であって、 なるほど、そうなんですか。 >なので 0< となるのは「実行できない」の原因ではないと思われまっする。 >「実行できない」の詳細について記載がないのでこれ以上の判断は出来ません。 >本体プログラム側のバグを疑ってください。 今回実行したい「app.exe」が特にエラーメッセージを表示せず、 何故実行できないのかわからなかったため、この'0'が付加することによるのかな と想像してしまいました。 仰るとおり、本体プログラム側を疑って調査してみます。 ありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1153] Re:makeファイル中のリダイレクト
投稿者:tos
2008/08/28 17:32:49

今回実行していた「app.exe」が処理が成功しているにもかかわらず、 '1'を返していたため、makeが その戻り値を検出し、処理を停止してしまって いたようです。 ('-'を付加することにより逃げました。) 774RRさんありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]