Makefile 编译生成多个可执行文件
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