CC = gcc
CXX = g++
CFLAGS = -O -DDBG -D_REENTRANT -Wall -DUSE_PTHREAD -pthread
LDFLAGS = -ldl -lnsl -lm -lpthread
#wildcard 对 c文件进行展开
SRCS = $(wildcard *.c) $(wildcard *.cpp)
#去除路径信息
dir=$(notdir $(SRCS))
# 把后缀.c 替换成 .o
OBJS = $(patsubst %.c, %.o, $(patsubst %.cpp, %.o,$(dir)) )
//OBJS = main1.o main.o
DATALIBS = dblib/lib.a
ZIPLIBS = ZipCoder/ZipCoder.a
TARGET = main main1
all: $(TARGET)
@echo $(SRCS)
@echo $(dir)
@echo $(OBJS)
main : main.o $(filter-out main1.o main2.o,$(OBJS))
$(CXX) $(CFLAGS) -o $@ $^ $(LDFLAGS)
main1 : main1.o $(filter-out main.o main2.o,$(OBJS))
$(CXX) $(CFLAGS) -o $@ $^ $(LDFLAGS)
%.o : %.c
$(CC) -c $(CFLAGS) $^ -o $@
%.o : %.cpp
$(CXX) -c $(CFLAGS) $^ -o $@
.PHONY : clean
clean :
rm -f *.o
rm -f ../bin/excute
# install:
# mv Excute excute; cp -f ordermisd ../bin/;
Makefile常用理解:
参数: makefile里用${temp}
定义的变量: $(temp)
传递的操作。 例如: make clean。 其中clean是伪字符. makefile里的使用:clean:
判断 参数跟变量都只用名字,
ifdef 不用${TARGET} 和 $(TARGET)
ifdef TARGET
HOST = ${TARGET}-
else
HOST =
endif