我是ECE的一名学生,从事编程工作;它已经提交并正在评分,但我仍然想知道为什么我的makefile不起作用。当我使用命令' make tests'在我们的学校服务器上运行该文件时它回应
' make:testq:command not found。 make * 测试错误127
如果我跑步' make testq12345'它实际上会运行我的程序" myar"并生成输出文件,但它会给出错误255.我不明白这个问题,或者为什么makefile找不到目标。我已经通过stackoverflow和其他来源搜索了这些错误,但不了解并且无法找到可行的解决方案。如果重要的是我在Linux服务器上运行它。
我在CS311 / Homework4 / test中运行它,其中包含makefile,程序和文本文件。
感谢您的时间和帮助;它赞赏。
#
# $RCSfile$
# $Revision$
# $Author$
# $Date$
# $Log$
#
# Author: Cody R Crawford
# Email: crawfoco@onid.orst.edu
# Course: CS311-400
# Homework: 4
# Citations:
# http://mrbook.org/tutorials/make/
# For examples, guidance, and genera understanding
# Assumptions: I assume you want the .o files to show up unless
# you specifically command 'clean'
#########################################################
CC=gcc
DEBUG=-g
CFLAGS=$(DEBUG) -Wall
PROGS=sig_demo myar
OBJECTS=$(PROGS:.c=.o)
all: $(PROGS)
sig_demo.o: sig_demo.c
$(CC) $(CFLAGS) -c sig_demo.c
sig_demo.c: sig_demo.o
$(CC) $(CFLAGS) -c sig_demo.c
myar.o: myar.c
$(CC) $(CFLAGS) -c myar.c
myar.c: myar.o
$(CC) $(CFLAGS) -c myar.c
tests:
testq
testt
testv
testq:
testq24
testq135
testq12345
testq24:
rm -f ar24.ar
ar q ar24.ar 2-s.txt 4-s.txt
myar q myar24.ar 2-s.txt 4-s.txt
diff ar24.ar myar24.ar
testq135:
rm -f ar135.ar
ar q ar135.ar 1-s.txt 3-s.txt 5-s.txt
myar q myar135.ar 1-s.txt 3-s.txt 5-s.txt
diff ar135.ar myar135.ar
testq12345:
rm -f ar12345.ar
rm -f myar12345.ar
ar q ar12345.ar 1-s.txt 2-s.txt 3-s.txt 4-s.txt 5-s.txt
./myar -q myar12345.ar 1-s.txt 2-s.txt 3-s.txt 4-s.txt 5-s.txt
diff ar135.ar myar135.ar
testt:
testt24
testt135
testt12345
testt24:
rm -f ar24.ar
ar q ar24.ar 2-s.txt 4-s.txt
ar t ar24.ar > ar-ctoc.txt
myar -t ar24.ar > myar-ctoc.txt
diff ar-ctoc.txt myar-ctoc.txt
testt135:
rm -f ar135.ar
ar q ar135.ar 1-s.txt 3-s.txt 5-s.txt
ar t ar135.ar > ar-ctoc.txt
myar -t ar135.ar > myar-ctoc.txt
diff ar-ctoc.txt myar-ctoc.txt
testt12345:
rm -f ar12345.ar
ar q ar12345.ar 1-s.txt 2-s.txt 3-s.txt 4-s.txt 5-s.txt
ar t ar12345.ar > ar-ctoc.txt
myar -t ar12345.ar > myar-ctoc.txt
diff ar-ctoc.txt myar-ctoc.txt
testv:
testv24
testv135
testv12345
testv24:
rm -f ar24.ar
ar q ar24.ar 2-s.txt 4-s.txt
ar v ar24.ar > ar-ctoc.txt
myar -v ar24.ar > myar-ctoc.txt
diff ar-ctoc.txt myar-ctoc.txt
testv135:
rm -f ar135.ar
ar q ar135.ar 1-s.txt 3-s.txt 5-s.txt
ar v ar135.ar > ar-ctoc.txt
myar -v ar135.ar > myar-ctoc.txt
diff ar-ctoc.txt myar-ctoc.txt
testv12345:
rm -f ar12345.ar
ar q ar12345.ar 1-s.txt 2-s.txt 3-s.txt 4-s.txt 5-s.txt
ar v ar12345.ar > ar-ctoc.txt
myar -v ar12345.ar > myar-ctoc.txt
diff ar-ctoc.txt myar-ctoc.txt
clean:
rm -f $(PROGS) $(OBJECTS) *.o *~
答案 0 :(得分:2)
Dependencies应列在同一行,否则会尝试将它们作为命令执行;
例如;
tests:
testq
testt
testv
只会尝试执行不存在的shell命令testq
,testt
和testv
并提供错误,而
tests: testq testt testv
只会看到makefile目标testq
,testt
和testv
在目标tests
执行之前完成。在这种情况下,tests
不包含任何命令,因此目标唯一能做的就是看到执行了depdendencies。
答案 1 :(得分:1)
我认为您正在寻找this:
一个简单的makefile包含"规则"具有以下形状:
target ... : dependencies ...
command
...
...
这是您需要解决的问题:
tests: testq testt testv
testq: testq24 testq135 testq12345
testv: testv24 testv135 testv12345