我一直收到一条错误消息,说“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 *~
答案 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
目标的先决条件是什么?