1)如果我通过gcc -o ./file1 someArgs ./file2 someArgs
在终端上输入每个命令,然后make
2)如果我输入终端,也可以:make rst和make res
3)无法正常工作,在终端
中输入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
的其他一些组合。所有相同的错误:
SslSelectChannelConnector
答案 0 :(得分:2)
您似乎在制作规则的先决条件及其配方之间存在一些混淆。先决条件与目标名称在同一行;配方在下一个标签缩进的一行或多行上。因此,例如,这条规则......
all:
check
...说目标'所有'没有先决条件(所以它总是被认为是过时的),并且构建它的方法是运行命令 check
。你真正想要的是建立一个名为' check'的目标,你可以通过检查'来实现这个目标。所有'
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
会弄清楚它们是否已经过时,并且会在有时候重建它们它需要做。
答案 1 :(得分:1)
第一个目标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