Makefile多文件编译
编译库
TARGET=libmytest.so
all: $(TARGET)
CFLAGS += -Os -Wall \
-I. \
-I./common \
-I../include
LDFLAGS += -L. -L.. -L../../lib
C_FILES=./common/common.c \
./common/common_os.c
C_FILES+=./src/shared/queue.c \
./src/shared/util.c \
./src/shared/mgmt.c \
./src/shared/crypto.c \
./src/shared/mainloop.c
C_FILES+=./arch.c \
./arch_os.c\
./arch_os_timer.c\
./app.c
OBJS = $(patsubst %c, %o, $(C_FILES))
LDLIBS = -lrt -lpthread
$(OBJS): %.o : %.c
$(CC) -c $(CFLAGS) $< -o $@
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) $^ $(LDLIBS) -fPIC -shared -o $(TARGET)
clean:
rm -rf $(OBJS) $(TARGET)
CC = aarch64-linux-gnu-c++
CFLAGS = #-O2
DBUG = -g
INCLUDE = -I../out/include/ -I../out/include/alize-core/include/ -I../dao/ -I../
LIBS = -lpthread -lsqlite3
LD_FLAG = -L../out/lib
SRCS = $(wildcard *.cpp)
OBJS = $(patsubst %cpp, %o, $(SRCS))
CGIS = $(patsubst %cpp, %cgi, $(SRCS))
DEP_OBJS = ../dao/sysUserDml.o ../logApi/log.o ../utils/util.o
.PHONY : clean
all: $(CGIS)
.c.o:
$(CC) $(DBUG) -c $(CFLAGS) $(INCLUDE) $<
.cpp.o:
$(CC) $(DBUG) -c $(CFLAGS) $(INCLUDE) $<
%.cgi : %.o
$(CC) $(DBUG) -o $@ $(OBJS) $(DEP_OBJS) $(LD_FLAG) $(LIBS) $(INCLUDE)
clean :
-rm -f $(OBJS) $(CGIS)
改进方法
CC = aarch64-linux-gnu-c++
CFLAGS = #-O2
DBUG = -g
INCLUDE = -I../out/include/ -I../out/include/alize-core/include/ -I../dao/ -I../model -I../utils -I.
LIBS = -lpthread -lsqlite3 -lcgic
LD_FLAG = -L../out/lib
SRCS = $(wildcard *.cpp)
OBJS = $(patsubst %cpp, %o, $(SRCS))
CGIS = $(patsubst %cpp, %cgi, $(SRCS))
DEP_OBJS = ../dao/sysUserDml.o \
../dao/userEnrollDml.o \
../logApi/log.o \
../utils/util.o \
../model/userEnroll.o
.PHONY : clean
all:$(CGIS)
clean :
-rm -f $(OBJS) $(CGIS)
$(CGIS) : %.cgi : %.o
$(CC) $(DBUG) $(DEP_OBJS) $(LD_FLAG) $(LIBS) $(INCLUDE) $< -o $@
$(OBJS): %.o : %.cpp
$(CC) -c $(DBUG) $(CFLAGS) $(INCLUDE) $<
类似使用方式
BIN = test
SRCS = $(wildcard *.cpp)
OBJS = $(patsubst %cpp, %o, $(SRCS))
.PHONY : clean
all:$(BIN)
clean :
-rm -f $(OBJS) $(BIN)
$(BIN) : $(OBJS)
$(CXX) -o $@ $ *.o $(LD_FLAG) $(LIBS)
$(OBJS): %.o : %.cpp
$(CXX) -c $(CFLAGS) $<
Makefile编译子目录
dirs:= multi_code_table/src \
multi_main/src \
multi_msg_find/src \
multi_set_up/src \
multi_user_table/src \
sms_code_set/src \
top/src \
user_table_set/src
all:
$(foreach N, $(dirs),make -C $(N);)
clean:
$(foreach N, $(dirs),make clean -C $(N);)
常用命令
- 打印当前目录
$(warning $(shell pwd))
- 文件模式进行替换
#$(patsubst 原模式, 目标模式, 文件列表)
OBJS = $(patsubst %.c, %.o, $(SRC))
- foreach循环
$(foreach var , list, text)
names := test main log caffe
files := $(foreach n , $(name), $(n).o )
输出files的值为:“test.o main.o log.o caffe.o