• ベストアンサー

gfortranでmakefile

gfortranのmakefileを作成し、"make test"と実行しても成功しません。 どうすればいいのでしょうか? どこか間違いがあるでしょうか? 下にmakefileを全文載せましたのでアドバイスをよろしくお願いします。 OBJS = main.o tree.o treef.o test : ${OBJS} gfortran -c test ${OBJS} main.fやtree.fやtreef.fのファイルの中身は問題ありません。 他のパソコンではキチンとコンパイルに成功しています。 ちなみに、"make test"と実行して出てくるエラーメッセージが「makefile:3 *** 最初のターゲットより前にコマンドを起動. 中止.」 です。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.5

> commands commence before first target. Stop このエラーメッセージで検索すると "`commands commence before first target. Stop.'(訳:最初のターゲットの前にコマンドが開始されました。停止します。) `missing rule before commands. Stop.'(訳:コマンド前のルールの欠落。停止します。)  これはmakefileの最初がコマンドスクリプトの一部になっているようだという意味です。つまりタブ文字で始まっていて(変数式のような)makeで定められたコマンドが見当たらない、という事です。コマンドスクリプトはターゲットに常に関連していなければなりません。 生成される第二の要因は、セミコロンが空白ではない最初の文字として行にある場合で、makeはこれを行の"ターゲット: 依存関係"の項目を省いたと解釈します。" http://www.ecoop.net/coop/translated/GNUMake3.77/make_16.jp.html というのが見つかります。 本当に、うまくいくPCといかないPCとで同じmakefileですか? うまくいくのといかないのとそれぞれの環境で od -t x1 makefile としたら結果は同じですか? OSとかディストリというのは、 たとえば CentOS とか Vine Linuxとか、どういう名前のものを 使っているかという確認でした。 うまくいかないPCだけ別のもの使ってるとかはありませんか? わけわかんなければ uname -a ってコマンドをそれぞれのPCで実行して、その結果を比べてください。

その他の回答 (4)

  • ishi7474
  • ベストアンサー率32% (71/216)
回答No.4

UNIX系OSでは"test"という名前のコマンドがあるので、それと 混同している可能性もあります。"test"→"test1"とかに変更 して試されてはどうですか。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

すんません。寝ぼけてました。 カテゴリからすればほぼ間違いなく GNU make ですわな。 ということで、先の補足要求のOSはディストリに読み替えてくださいませ。

tak1234321
質問者

補足

すみません、具体的にどうすればいいのでしょうか? 素人なもので、専門用語とかよくわからないのですが・・・。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

OBJS = main.o tree.o treef.o test : ${OBJS} gfortran -c test ${OBJS} これ、gfortranのオプション間違ってません? gfortran -o test ${OBJS} ならわかるんですが。 とりあえずこれはgfortranじゃなくてmakeの問題でしょう。 うまくいくものと、いかないものの環境をそれぞれ書いてください。 とりあえずOSとmakeのバージョンかな。 使っているmakeが違っていて suffix ルールが違うとか。 あ、Unix系のOSを使っているのなら、 LANG=C make test でメッセージが変わります?

tak1234321
質問者

補足

現在使用しているパソコンが購入したばかりのものであり、うまくいった試しがまだありません・・・。 僕自身も素人でして、専門用語とかよくわからないのですが、具体的にどうすればいいのでしょう? ちなみに LANG=C make test とコマンド文を打てばいいのでしょうか? 打ったら「*** commands commence before first target. Stop」 と表示されます。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

う~ん, 英語のメッセージじゃないとわからんなぁ.... ひょっとすると, どこかの行の先頭にこっそりタブ文字が入ってたりしませんか? ... と, 手元の本 (GNU Make) には書いてあった.

関連するQ&A