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
原文地址:https://www.cnblogs.com/hzijone/p/5705743.html