Makefile模板

简介:
通用——只需把一些变量设置好就能使用。

分类:
1. 通用的c项目
2. 通用的c++项目
3. 通用的静态库c项目
4. 通用的动态库c项目

建议的目录结构:
project
       bin
       include
       src
       tests
复杂一点的:
project
       docs
       bin
       include
       src
       lib
       modules


1. 通用的c项目
TARGET = 
PREFIX_BIN =

CC = gcc
INCLUDES = 
LIBS = 
CFLAGS =-Wall -Werror
LINKFLAGS =

C_SOURCES = $(wildcard *.c)
C_OBJS = $(patsubst %.c, %.o, $(C_SOURCES))

.c.o:
       $(CC) -c -o $*.o $(CFLAGS) $(INCLUDES) $*.c

compile: $(C_OBJS)
       $(CC)     $(LINKFLAGS) -o $(TARGET) $^ $(LIBS)

clean:
       rm -f $(C_OBJS)
       rm -f $(TARGET)

install: $(TARGET)
       cp $(TARGET) $(PREFIX_BIN)

uninstall:
       rm -f $(PREFIX_BIN)/$(TARGET)

rebuild: clean compile 

2. 通用的c++项目

TARGET = 
PREFIX_BIN =

CC = gcc
CXX = g++
INCLUDES = 
LIBS = 
CFLAGS = -Wall -Werror
LINKFLAGS =

C_SOURCES = $(wildcard *.c)
C_OBJS = $(patsubst %.c, %.o, $(C_SOURCES))
CPP_SOURCES = $(wildcard *.cpp)
CPP_OBJS = $(patsubst %.cpp, %.o, $(CPP_SOURCES))

.c.o:
       $(CC) -c -o $*.o $(CFLAGS) $(INCLUDES) $*.c
.cpp.o:
       $(CXX) -c -o $*.o $(CFLAGS) $(INCLUDES) $*.cpp

compile: $(CPP_OBJS) $(C_OBJS)
       $(CXX) $(LINKFLAGS) -o $(TARGET) $^ $(LIBS)

clean:
       rm -f $(CPP_OBJS) $(C_OBJS)
       rm -f $(TARGET)

install: $(TARGET)
       cp $(TARGET) $(PREFIX_BIN)

uninstall:
       rm -f $(PREFIX)/$(PREFIX_BIN)

rebuild: clean compile 


3. 通用的静态库c项目

TARGET = libmain.a
PREFIX = /usr/lib

CC = gcc
INCLUDES = 
LIBS = 
CFLAGS =
C_SOURCES = $(wildcard *.c)
C_OBJS = $(patsubst %.c, %.o, $(C_SOURCES))

.c.o:
       $(CC) -c -o $*.o $(CFLAGS) $(INCLUDES) $*.c

$(TARGET): $(C_OBJS)
       rm -f $@
       ar cr $@ $(C_OBJS)
       ranlib $@

clean:
       rm -f $(C_OBJS) 
       rm -f $(TARGET)

install: $(TARGET)
       cp $(TARGET) $(PREFIX)

uninstall:
       rm -f $(PREFIX)/$(TARGET)

rebuild: clean $(TARGET) 


4. 通用的动态库c项目

TARGET = 
PREFIX_LIB = /usr/lib
PREFIX_INCLUDE = /usr/local/include
INSTALL_HEADERS = 

CC = gcc
INCLUDES = 
LIBS = 
CFLAGS =-O3 -fPIC -Wall -Werror
LINKFLAGS = -shared

C_SOURCES = $(wildcard *.c)
C_OBJS = $(patsubst %.c, %.o, $(C_SOURCES))

.c.o:
       $(CC) -c -o $*.o $(CFLAGS) $(INCLUDES) $*.c

compile: $(C_OBJS)
       $(CC)     $(LINKFLAGS) -o $(TARGET) $^ $(LIBS)

clean:
       rm -f $(C_OBJS)
       rm -f $(TARGET)

install: $(TARGET)
       cp $(TARGET) $(PREFIX_LIB)
       cp $(INSTALL_HEADERS) $(PREFIX_INCLUDE)

uninstall:
       rm -f $(PREFIX_LIB)/$(TARGET)
       cd $(PREFIX_INCLUDE); rm -f $(INSTALL_HEADERS)

rebuild: clean compile
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值