在`homework1'之后缺少操作数 - Makefile

时间:2013-07-29 02:54:08

标签: makefile

我一直收到一条错误消息,说“diff:在homework1'之后缺少操作数”,但我已经包含了一个bash文件。有人可以看看我的makefile并给我一个如何解决它的提示吗?谢谢!

#
#  $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 *~

2 个答案:

答案 0 :(得分:0)

您引用了一个make变量$(example.bash),但makefile中没有设置变量example.bash。您的意思是文件example.bash吗?如果是这样的话,你不应该使用make变量语法:

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

(为什么这里有*作为先决条件?这似乎没用?)

答案 1 :(得分:0)

要使用diff比较两个命令的输出,您需要将这两个命令中至少一个命令的输出重定向到文件,而另一个命令的输出通过管道输出到{{1}的输入流}。以下示例将diff替换为其输出文件:

$(PROGS)

它执行./$(PROGS) > progs_output bash example.bash | diff progs_output - || exit 0 的值,将其输出发送到名为$(PROGS)的文件。然后执行bash脚本,其输出通过管道传送到progs_output实用程序的标准输入流,该实用程序将diff与来自其标准输入流的内容进行比较。其他一切都是你做的。你为什么要使用0号出口?如果测试失败,你不想让make告诉你吗?

另外,星号(*)作为progs_output目标的先决条件是什么?