プロが教えるわが家の防犯対策術!

Managing Projects with GNU Make, 3rd Editionを読んでいます。

p.15 Empty targetについてのサンプルでエラーが出ます。

Makefileは以下のとおりです。
-----
prog: size prog.o
gcc $(LDFLAGS) -o $@ $^
prog.o: prog.c
gcc -c $^
size: prog.o
size $^
touch size
-----

make prog
と実行すると以下のエラーとなります。
-----
gcc -c prog.c
size prog.o
text data bss dec hexfilename
152 0 0 152 98prog.o
touch size
gcc -o prog size prog.o
size: file not recognized: File truncated
make: *** [prog] Error 1
-----

自分なりの理解では、sizeという空ファイルを作り、そのタイムスタンプをtouchで更新することにより、progをmakeすることができるということだと思います。
ただ、最後に
gcc $(LDFLAGS) -o $@ $^
をする時に$^に空ファイルsizeが含まれていて、そのため
size: file not recognized: File truncated
というエラーを出しているように思います。

そもそものサンプルMakefileが間違っているのでしょうか? あるいはどこかを修正すれば、Empty targetというのが使い物になるのでしょうか?

A 回答 (1件)

もともとのmakefileが間違ってる。

2行目の$^ が間違い。だいちあ、このmakefileの意図がいまいち不明確ですが。
size情報をだしたいなら、prog.oの生成手段のところに、sizeコマンドをいれておけば、いいだけの話だし。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

> もともとのmakefileが間違ってる。2行目の$^ が間違い。だいちあ、このmakefileの意図がいまいち不明確ですが。

やはりそうなのですね。
$^とするとファイルsizeまで含まれますね。

あと、sizeというファイルを作るのもどうかと思っていました。

お礼日時:2014/02/04 12:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!