Makefile 常用命令

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章