我正在学习GNU makefile。我看到了这个页面:http://mrbook.org/blog/tutorials/make/
在本文结尾处,我发现了这一点:
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 $@
有人可以解释OBJECT变量中的内容以及.cpp.o:
的目标(也是$<
)吗?
当我使用类似的东西时,我也发现了:
SRC = $(wildcard $(SRC_DIR)*.c)
SRC_OBJS = $(patsubst %.c, %.o, $(SRC))
并使用&#34; $(SRC_OBJS)&#34;作为目标,它将为每个所需对象编译所有对象。这不会发生在第一个问题上。有什么区别?
答案 0 :(得分:5)
后缀规则告诉您如何将file.cpp
转换为file.o
任意file
。
$<
是引用源文件的自动变量,在后缀规则的情况下为file.cpp
。
$@
是引用目标文件file.o
的自动变量。