makefile符号$ @和$ <是什么意思?
CC=g++
CFLAGS=-c -Wall
LDFLAGS=
SOURCES=main.cpp hello.cpp factorial.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=hello
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
.cpp.o:
$(CC) $(CFLAGS) $< -o $@
$@
和$<
做什么?
$@
是正在生成的文件的名称,并且$<
第一个先决条件(通常是源文件)。 您可以在GNU Make手册中找到所有这些特殊变量的列表。
例如,请考虑以下声明:
all: library.cpp main.cpp
在这种情况下:
$@
评估为all
$<
评估为library.cpp
$^
评估为library.cpp main.cpp
$@
和$<
被称为自动变量。 $@
是输出变量。 $<
是第一个输入变量。 例如:
hello.o: hello.c hello.h
gcc -c $< -o $@
这里, hello.o
是输出文件。 这是$@
扩展到的。 第一个依赖是hello.c
。 这就是$<
扩展到的。
-c
标志生成.o
文件; 请参阅man gcc
获取更详细的解释。 -o
指定要输出到的文件。
有关更多详细信息,请阅读本文。
另外,你可以检查GNU手册。 有一种方法可以调试makefile以更好地理解它。
这将输出makefile数据库:
$make -p
$@
和$<
是特殊的宏。
哪里:
$@
是目标的文件名。
$<
是第一个依赖项的名称。