Makefile 编译生成多个可执行文件

时间:2021-11-11 19:05:38
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