Ubuntu 15.10 64位目标“all”的配方失败

1)如果我通过gcc -o file1 file1.c && gcc file2.c -lm -o file2然后./file1 someArgs ./file2 someArgs在terminal上input每个命令,

2)如果我inputterminal,也可以运行 :make rst,make res

3)在terminal中inputmake 不工作

Makefile文件:

 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 

第一个目标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 

你似乎在制定规则的先决条件和配方之间有一些混淆。 先决条件与目标名称相同。 配方继续下一个制表符缩进的行或行。 因此,例如,这个规则…

 all: check 

…说'目标'all'没有先决条件(所以它总是被认为是过时的),并建立它的秘诀是运行命令 check 。 你实际上想要的是建立一个名为“检查”的目标,你可以通过检查'所有'的前提条件来发生这种情况:

 all: check 

更一般地说,你似乎正在接近makefile,好像它是一个具有多个入口点的程序 ,但是它更好地被看作是可以用来构建东西的一组规则。 因此,实际上构建文件以将构建文件指定为目标的规则是常规的并且是理想的。 而且,要充分利用制造的力量,你应该为那些和其他规则表达适当的先决条件。 例如:

 ./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会判断它们是否过时,并且在需要的时候重建它们。