0

「diff: 'homework1' の後にオペランドがありません」というエラー メッセージが表示され続けますが、bash ファイルが含まれています。誰かが私のメイクファイルを見て、それを修正する方法のヒントを教えてもらえますか? ありがとう!

#
#  $RCSfile$
#  $Revision$
#  $Author$
#  $Date$
#  $Log$
#

CC=gcc
DEBUG=-g
CFLAGS=#(DEBUG) -Wall -Wshadow -Wunreachable-code -Wredundant-decls -Wmissing-declarations -Wold-style-definition -Wmissing-prototypes -Wdeclaration-after-statement
PROGS=homework1 

all: $(PROGS) test

homework1: homework1.o
    $(CC) $(CFLAGS) -o homework1 homework1.o

homework1.o: homework1.c
    $(CC) $(CFLAGS) -c homework1.c

test:   *
    diff $(PROGS) $(example.bash) || exit 0

clean:
    rm -f $(PROGS) *.o *~
4

2 に答える 2

0

make 変数を参照しましたが、makefile に$(example.bash)変数が設定されていません。example.bashファイルのことですexample.bashか?正しい場合は、make variable 構文を使用しないでください。

test:   *
        diff $(PROGS) example.bash || exit 0

(なぜ*ここに前提条件があるのですか?それは役に立たないようです)

于 2013-07-29T02:59:35.170 に答える
0

を使用して 2 つのコマンドの出力を比較するには、2 つのコマンドdiffの少なくとも 1 つの出力をファイルにリダイレクトし、別のコマンドの出力を の入力ストリームにパイプする必要がありますdiff$(PROGS)出力ファイルに置き換える例を次に示します。

./$(PROGS) > progs_output
bash example.bash | diff progs_output - || exit 0

の値を実行し、$(PROGS)その出力を というファイルに送信しますprogs_output。次に、bash スクリプトが実行され、その出力がdiffユーティリティの標準入力ストリームにパイプされ、標準入力ストリームからの内容と比較progs_outputされます。他のすべてはあなたの行いです。しかし、なぜ出口 0 を使用するのでしょうか。テストが失敗した場合、make から通知されたくないですか?

また、testターゲットの前提条件としてアスタリスク (*) が付いているのは何ですか?

于 2013-07-29T03:42:43.847 に答える