天天看点

通用makefile 文件

## c/c++ 代码编译Makefile
########################常规配置##################################################
##目标文件
TARGET = server

##安装目录
INSTALL_DIR = /opt/

##包含头文件路径
# -I/xx/xx/include
INC_DIR = -I/usr/include/mysql -I/usr/include/libxml2

##依赖库
LIB_DIR = -L/usr/lib64/mysql 
LIB_DEPENDS = -lmysqlclient -lcurl -lxml2

##编译选项
CFLAGS = -Wall -O -g
# -Wall  输出所有告警
# -O     在编译时进行优化
# -g     编译debug版本

######################################################################################
##编译器选用
CC = gcc
XX = g++

##wildcard通配符函数,产生一个所有.c .cpp文件列表
C_SRC = $(wildcard *.c)
CXX_SRC = $(wildcard *.cpp)

##产生一个所有.c .cpp文件 对应的.o文件列表
##把所有.c替换成.o
#C_OBJS = $(C_SRC:%.c=%.o)
C_OBJS = $(subst .c,.o,$(C_SRC))
#CXX_OBJS = $(CXX_SRC:%.cpp=%.o)
CXX_OBJS = $(subst .cpp,.o,$(CXX_SRC))
ALL_OBJ = $(C_OBJS) $(CXX_OBJS)

##把所有c文件编译生成.o文件
## $< --第一个依赖文件;$@ --目标文件
%.o:%.c
	$(CC) $(CFLAGS) -c $< -o $@ $(INC_DIR)

##把所有cpp文件编译生成.o文件
%.o:%.cpp
	$(XX) $(CFLAGS) -c $< -o $@ $(INC_DIR)

##目标文件,依赖OBJS中的.o文件
##all--伪目标,$^--所有依赖文件
all: $(TARGET)
$(TARGET): $(ALL_OBJ)
	$(XX) $^ -o $(TARGET) $(INC_DIR) $(LIB_DIR) $(LIB_DEPENDS)
	chmod a+x $(TARGET)

##安装命令	
install: all
	mkdir -p $(INSTALL_DIR)
	cp -R $(TARGET) $(INSTALL_DIR)
	
##执行make clean操作
clean:
	rm -rf *.o  $(TARGET)

##指定哪些是伪目标,作用防止有这样的文件存在冲突,导致makefile不执行
.PHONY: all clean distclean install
           

继续阅读