使用以下作为示例makefile:
CC=g++
CFLAGS=-c -Wall
LDFLAGS=-lfoobar
SOURCES=main.cpp foo.cpp bar.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=hello
all: $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
$(OBJECTS):
$(CC) $(CFLAGS) $< -o $@
$&LT;总是膨胀到无。
我尝试将其更改为以下内容:
CC=g++
CFLAGS=-c -Wall
LDFLAGS=
SOURCES=main.cpp foo.cpp bar.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=hello
all: $(OBJECTS) # or main.o foo.o bar.cpp
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
.cpp.o:
$(CC) $(CFLAGS) $< -o $@
这告诉我main.o
没有规则我在这里遗漏了什么吗?我看到很多make文件使用这些语法和/或变量和依赖项。
答案 0 :(得分:2)
试试这个:
CXX=g++
CXXFLAGS=-c -Wall
LDFLAGS=
SOURCES=main.cpp foo.cpp bar.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=hello
all: $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS) # or main.o foo.o bar.cpp
$(CXX) -o $@ $(LDFLAGS) $(OBJECTS) $(LIBS)
无论如何,构建每个目标文件的规则都是内置的,因此无需定义它。