Makefile 问题:错误 127、255,在 makefile 中运行程序

Posted

技术标签:

【中文标题】Makefile 问题:错误 127、255,在 makefile 中运行程序【英文标题】:Makefile Issues: Error 127, 255, running programs within makefile 【发布时间】:2014-05-03 17:53:19 【问题描述】:

我是 ECE 的一名学生,正在从事一项编程作业;它已经提交并正在评分,但我仍然想知道为什么我的 makefile 不工作。当我在学校服务器上使用命令“make tests”运行文件时,它会响应

'make: testq: 找不到命令。 make * 测试错误 127

如果我运行“make testq12345”,它实际上会运行我的程序“myar”并生成输出文件,但它会给出错误 255。我不明白这个问题,或者为什么 makefile 找不到目标.我已经通过 *** 和其他来源搜索了有关这些错误的信息,但不理解也找不到可行的解决方案。如果重要的话,我会在 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 *~

【问题讨论】:

makefile 很多。你能把它分解成一个最小的测试用例吗? 当然可以。它的作用是在 make 运行时编译 sig_demo.c 和 myar.c。 (抱歉,看不懂cmets的代码标签语法)gcc -g -Wall -c sig_demo.cgcc sig_demo.o -o sig_demogcc -g -Wall -c myar.cgcc myar.o -o myar 一切正常。如果我要运行make tests:会发生以下情况:testqmake: testq: command not foundmake: *** [tests] error 127。如果我运行make: testq24,我会收到:rm -f ar24.arar q ar24.ar 2-s.txt 4-s.txtar: creating ar24.armyar q myar24.ar 2-s.txt 4-s.txtmake: myar: command not foundmake: *** [testq24] Error 127 因为这个 makefile 的目标是在程序上运行测试,这是我对 ar 命令的实现(并不是 100% 完全符合规范)。运行make 用于编译,make clean 用于去除粪便,make tests 用于在各种测试目标中运行命令。 【参考方案1】:

Dependencies应该列在同一行,否则会尝试将它们作为命令执行;

例如;

tests:
    testq
    testt
    testv

只会尝试执行不存在的shell命令testqtestttestv,并给出错误,而;

tests: testq testt testv

只会在目标tests 执行之前完成makefile 目标testqtestttestv。在这种情况下,tests 不包含任何命令,因此 target 唯一要做的就是确保执行依赖项。

【讨论】:

【参考方案2】:

我想你在找this:

一个简单的 makefile 由具有以下形状的“规则”组成:

target ... : dependencies ...
        command
        ...
        ...

这是你需要解决的问题:

tests: testq testt testv

testq: testq24 testq135 testq12345

testv: testv24 testv135 testv12345

【讨论】:

谢谢!现在第二个问题是它可以运行 testq(因此 testq24)但会产生以下错误:make: *** [testq24] Error 127。如果我将myar ... 更改为./myar ...它会给出make: *** [testq24] Error 255。感觉就是看不到本地文件夹,怎么给路径呢? @Borne2Run_When_SegFault:您也可以使用绝对路径,也可以将 Makefile 的当前目录重用为:current_dir = $(shell pwd)current_dir = $(notdir $(shell pwd))

以上是关于Makefile 问题:错误 127、255,在 makefile 中运行程序的主要内容,如果未能解决你的问题,请参考以下文章

如何以一个字符串的形式阻止 155.155.64.0 - 155.155.127.255 这样的范围?

为啥ip开头不能用0、127、255?

ping127.255.255.255地址不通

QSerialPort::write() - 只有签名值? (最多 127 个十进制数)?我需要发送 0xFF (255 dec)

加载和使用 Alpha 通道位图

IP地址