有一些C代码:
apple.c
#include<stdio.h>
int main(void)
{
printf("apple\n");
return 0;
}
生成文件
apple:
gcc -c $@.c
gcc $@.o -o $@
$ make apple
它完美无缺。但是如果我将Makefile
修改为:
apple:
gcc -c $1.c
gcc $1.o -o $1
$ make apple
这是行不通的。当只有一个参数时,$@
和$1
之间有什么区别?
答案 0 :(得分:7)
在shell脚本中,没有区别。但这是一个Makefile,所以这些引用是make variables。 $@
是name of the rule target(apple
此处),而$1
是名为1
的变量 - 没什么特别的。 Bash没有看到这些变量引用;他们由make处理。
$ cat Makefile
1 = one
target:
@echo '@ = $@'
@echo '1 = $1'
$ make
@ = target
1 = one