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
$@和$<是特殊的宏。
哪里:
$@是目标的文件名。
$<是第一个依赖项的名称。
