※ ChatGPTを利用し、要約された質問です(原文:gnu make empty target)
GNU Make Empty Targetとは? | Managing Projects with GNU Make, 3rd Edition
このQ&Aのポイント
GNU MakeのEmpty targetについてのサンプルでエラーが発生する理由を調査しました。
サンプルMakefileの間違いや修正方法についても解説しました。
Empty targetを使用する際の注意点や使い方についても紹介しました。
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 hex filename
152 0 0 152 98 prog.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というのが使い物になるのでしょうか?
お礼
回答ありがとうございます。 > もともとのmakefileが間違ってる。2行目の$^ が間違い。だいちあ、このmakefileの意図がいまいち不明確ですが。 やはりそうなのですね。 $^とするとファイルsizeまで含まれますね。 あと、sizeというファイルを作るのもどうかと思っていました。