Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile “家庭作业1';”后缺少操作数生成文件_Makefile - Fatal编程技术网

Makefile “家庭作业1';”后缺少操作数生成文件

Makefile “家庭作业1';”后缺少操作数生成文件,makefile,Makefile,我一直收到一条错误消息,上面写着“diff:homework1'之后缺少操作数”,但我包含了一个bash文件。有人能看看我的makefile并给我一个如何修复它的提示吗?谢谢 # # $RCSfile$ # $Revision$ # $Author$ # $Date$ # $Log$ # CC=gcc DEBUG=-g CFLAGS=#(DEBUG) -Wall -Wshadow -Wunreachable-code -Wredundant-decls -Wmissing-decla

我一直收到一条错误消息,上面写着“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 *~

您已经引用了一个make变量
$(example.bash)
,但make文件中没有设置变量
example.bash
。您是指文件
example.bash
?如果是这样,则不应使用make变量语法:

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

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

要使用
diff
比较两个命令的输出,您需要将这两个命令中的至少一个命令的输出重定向到文件,而另一个命令的输出通过管道传输到
diff
的输入流。下面是一个用其输出文件替换
$(PROGS)
的示例:

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


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

或者,如果您正在执行bash脚本,请使用
$$
,因为make认为它是一个变量
$
转义
$
字符,让shell执行脚本。@MadScientist:我尝试了几种不同的方法:“example.bash”、$$(example.bash)或$$example.bash。它说“make:**没有规则使目标
diff',这是
test.停止所需要的。”。我应该怎么做?我想做的是比较$(PROGS)和example的输出;看起来您在
测试之后删除了换行符:
目标,现在make认为
diff
命令是一个先决条件。你需要一条新线路。另外,你最初的问题很不清楚你想做什么:考虑到你随后的评论,似乎Chrono的回答会满足你的要求。