Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 生成文件别名_C_Variables_Gcc_Makefile - Fatal编程技术网

C 生成文件别名

C 生成文件别名,c,variables,gcc,makefile,C,Variables,Gcc,Makefile,可能重复: 请在下面的makefile中解释$@$^ LIBS = -lkernel32 -luser32 -lgdi32 -lopengl32 CFLAGS = -Wall # (This should be the actual list of C files) SRC=$(wildcard '*.c') test: $(SRC) gcc -o $@ $^ $(CFLAGS) $(LIBS) 这些是: $@表示目标,因此在您的情况下,它是测试 $^表示所有先决条件的名称,它

可能重复:

请在下面的makefile中解释$@$^

LIBS  = -lkernel32 -luser32 -lgdi32 -lopengl32
CFLAGS = -Wall

# (This should be the actual list of C files)
SRC=$(wildcard '*.c')

test: $(SRC)
    gcc -o $@ $^ $(CFLAGS) $(LIBS)
这些是:

$@表示目标,因此在您的情况下,它是测试

$^表示所有先决条件的名称,它们之间有空格。在您的例子中,它是所有.c文件的列表

SRC=$wildcard'*.c'使用获取目录中所有.c文件的列表,然后将其分配给变量SRC

假设有两个C源文件foo.C和bar.C。您的makefile有效地扩展到:

test: foo.c bar.c
      gcc -o test foo.c bar.c -Wall -lkernel32 -luser32 -lgdi32 -lopengl32
SRC等于gnu make中的通配符函数。它是与该路径匹配的文件列表。例如,它可能是

SRC=a.c b.c
对于规则,它依赖于所有源文件,目标是test,因此我们可以按如下方式展开规则:

gcc -o $@   $^     $(CFLAGS) $(LIBS
gcc -o test $(SRC) $(CFLAGS) $(LIBS)
然后用正确的扩展替换CFLAGS、LIBS和SRC


关于这方面的一些文档,请看一下:

,以防其他一些伟大的解释没有完全到位

make程序允许您使用所谓的自动变量。对于它为其执行操作的每个规则,它解析操作中指定的shell语句,并展开它找到的任何自动变量。变量扩展为在该点执行的特定规则上下文中的值

因此,在您的情况下,正在执行的规则是:

test: $(SRC)
在这个规则中,test是目标,$SRC扩展到的任何内容都是依赖项。现在,当make解析规则的action部分中指定的以下shell语句时

gcc -o $@ $^ $(CFLAGS) $(LIBS)
它将$@和$^识别为自动变量。$@扩展到当前规则的目标,$^扩展到依赖项,这分别是$SRC的测试和扩展。它在变量展开后执行shell语句。您可以通过查看make的输出来查看执行的最终扩展版本

$SRC将依次扩展为make函数通配符的结果。请记住,make中函数调用的语法为$function param…,并扩展为函数调用的结果,在本例中为后缀为.c的文件列表。

完全重复: