简单例子:
.SUFFIXES:.c .o ---------------------------------------------建立.c .o文件关联
CC=g++ --------------------------------------------------------变量用大写
OBJK=$(SRC:.cpp=.o)--------------------------------------将字符串中的.cpp替换为.o
EXEC=test
SRC=hello.cpp\------------------------------------------------当源代码是多个文件中
add.cpp
start: $(OBJK)
$(CC) -o $(EXEC) $(OBJK)
@echo ---------ok------- --------------------------------@不显示本行命令,只输出结果
.c.o:
$(CC) -o $@ -c $< -----------------------------------------$@ 表示关联文件中的后一个文件类型, $< 表示关联文件中的首个文件类型
clean:
rm -f $(OBJK)
复杂的语法:
1 TARGET=spider
2 SOURCES=$(wildcard *.cpp) //获取当前文件夹下所有的.CPP文件
3 OBJS=$(patsubst %.cpp,%.o,$(SOURCES)) // 将列表中所有的.cpp文件的后缀.cpp替换为.o
4
5 CXX:=g++ //:= 直接使用后面的对象, 注意与=进行区别
6 OPTIMIZATION?=-O2 -DNDEBUG //?= 是如果没有被赋值过就赋予等号后面的值
7 WARNINGS=-Wall
8 #WARNINGS=-Wall -Werror
9 REAL_CXXFLAGS=$(OPTIMIZATION) $(CXXFLAGS) $(WARNINGS) $(DEBUG) $(PROF)
10 REAL_LDFLAGS=$(LDFLAGS) $(PROF) -rdynamic -lpthread -levent -lcrypt -ldl
11
12
13
14 all: $(TARGET)
15 >---@if [ ! -d ../download ]; then mkdir ../download; fi
16
17 $(TARGET): $(OBJS)
18 >---$(CXX) -o $@ $(REAL_LDFLAGS) $^
19
20 .cpp.o:
21 >---$(CXX) -c $(REAL_CXXFLAGS) $<
22
23 clean:
24 >----rm -rf $(TARGET) $(OBJS)
25 >----rm -rf ../$(TARGET)
26
27 debug:
28 >---$(MAKE) OPTIMIZATION="" DEBUG="-g -ggdb -g3"
29
30 gprof:
31 >---$(MAKE) PROF="-pg"