【问题标题】:recipe for target 'all' failed on Ubuntu 15.10 64-bit目标“全部”的配方在 Ubuntu 15.10 64 位上失败
【发布时间】:2016-02-05 20:41:07
【问题描述】:

1) 如果我在终端上通过 gcc -o file1 file1.c && gcc file2.c -lm -o file2 键入每个命令,然后 ./file1 someArgs ./file2 someArgs 键入每个命令,程序工作会很好

2) 如果我在终端中输入 works:make rst 和 make res

3) 不工作在终端输入make

生成文件:

all:
    check

default:
    check

clean:
    rm -rf file1 file2

rst:
    gcc -o file1 file1.c && gcc file2.c -lm -o file2

res:
    ./file1 someArgs ./file2 someArgs

check:
    make clean
    make rst
    make res

也试过了:

all:
    check

default:
    check

clean:
    rm -rf file1 file2

rst:
    gcc -o file1 file1.c && gcc file2.c -lm -o file2

res:
    ./file1 someArgs ./file2 someArgs

check:
    clean
    rst
    res

还有其他一些有或没有make 的组合。都是一样的错误:

make: check: Command not found
Makefile:2: recipe for target 'all' failed
make: *** [all] Error 127

【问题讨论】:

    标签: c linux ubuntu gcc makefile


    【解决方案1】:

    您似乎对 make 规则的先决条件和它的配方有一些混淆。先决条件与目标名称位于同一行;配方继续下一个制表符缩进的一行或多行。因此,例如,这条规则......

    all:
        check
    

    ... 说目标 'all' 没有先决条件(因此它总是被认为是过时的),并且构建它的方法是运行 command check。您实际上想要的是构建名为“check”的目标,您可以通过将“check”作为“all”的先决条件来实现:

    all: check
    

    更一般地说,您似乎将 makefile 视为具有多个入口点的程序,但最好将其视为make 可以用来构建的一组规则事物。因此,实际构建文件的规则将构建的文件指定为目标是常规且可取的。此外,要使用make 的全部功能,您应该为这些规则和其他规则表达适当的先决条件。例如:

    ./file1: file1.c
        gcc -o file1 file1.c
    
    ./file2: file2.c
        gcc file2.c -lm -o file2
    
    res: ./file1 ./file2
        ./file1 someArgs ./file2 someArgs
    

    如果你做的正确,那么你就不需要每次都删除和重建程序之类的技巧——make 会找出它们是否过时,并在需要时重建它们.

    【讨论】:

    • 注意,顺便说一下,每个make recipe 必须的每一行都以制表符开头,这很难输入到诸如需要输入 SO 答案的答案。如果您剪切并粘贴我的示例代码,您可能需要更正缩进。
    • 很棒的答案,把“支票”给了另一个人,因为他稍微快了一点
    【解决方案2】:

    第一个目标all 正在尝试运行一个名为check 的命令(目标default 也是如此)。我认为您希望命令 make 的行为与命令 make check 相同,并在 Makefile 中执行名为 check 的目标的操作。在这种情况下,将其添加为这样的依赖项:

    all: check
    
    default: check
    
    clean:
        rm -rf file1 file2
    
    rst:
        gcc -o file1 file1.c && gcc file2.c -lm -o file2
    
    res:
        ./file1 someArgs ./file2 someArgs
    
    check:
        make clean
        make rst
        make res
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-06
      • 2011-06-28
      • 1970-01-01
      • 2017-11-11
      • 1970-01-01
      • 2014-10-10
      • 1970-01-01
      • 2022-01-22
      相关资源
      最近更新 更多