ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.4001435 Makefileについて
質問者:tobasu makeファイルの書き方で悩んでいます。
makeファイルは書いたことがなく、ほとんど丸写しです。

私がしたいのは、
(1)run:部分で削除するファイルがなかった場合、エラーとなり次の行へ進みません。なくても(エラーでも/エラー回避して)次の行へ進む方法が知りたいです。

もうひとつは(2)run:部分で、cleanを実行し、makeしてrunを実行させる方法が知りたいです。

--------------以下、サンプルMakefileです。

CC = gcc
OBJS = main.o sub.o
PROG = test.exe

.c.o:
$(CC) -c $< -o $@
$(PROG) : $(OBJS)
$(CC) $(OBJS) -o $(PROG)
$(OBJS) : Makefile

clean:
rm -f *.o $(PROG)
run:
rm *.log <---- (1)ここでファイルがないとエラーで止まる
$(PROG)

all:
  <-- (2)[clean]を実行して、makeして、[run]を実行させたい

以上です。
困り度:
  • 困っています
質問投稿日時:
08/05/06 13:14
この質問に対する回答は締め切られました。

回答良回答10pt

ANo.2 書いてる間に#1さんが答えてくれたようなので若干補足
# うろ覚えな記憶で書いてるので間違ってるかもしれないけど…

$(OBJS) : Makefile
これは要らない気がします。あっても問題はありませんが。

run:
<TAB>-rm *.log
- を追加するとコマンドがエラーで返ってきても止まらなくなります。
エラーを出さない方法でも良いんですが、知っていて損はないはず。

all: clean $(PROG) run
[clean]を実行して、[$(PROG)]を実行して、[run]を実行する。
このように、ファイルだけではなく、ルールにも依存することが出来ます。
回答者:_himajin_
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:
08/05/06 13:43
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答良回答20pt

ANo.1 >(1)run:部分で削除するファイルがなかった場合、エラーとなり次の行へ進みません。なくても(エラーでも/エラー回避して)次の行へ進む方法が知りたいです。

Makefileを知らないのはともかく、基本的なコマンドも知らないとつらいです。この場合、rmコマンド。
rm -f *.log でファイルが無くてもエラーになりません。

>(2)run:部分で、cleanを実行し、makeしてrunを実行させる方法が知りたいです。

make all すると、 make clean;make;make run と同じにしたいということでしょうか。

all: clean $(PROG) run

と、コロンの後に並べて書きます。毎回make cleanするのは無駄だと思いますよ。
回答者:notnot
種類:回答
どんな人:一般人
自信:自信あり
回答日時:
08/05/06 13:28
この回答へのお礼この回答にお礼をつける(質問者のみ)