我所使用的一个通用的Makefile模板

话不多说,请看:

我的项目有的目录结构有:

dirls/
├── include
│   └── apue.h
├── lib
│   ├── error.c
│   ├── error.o
│   └── Makefile
├── src
│   ├── dirls.c
│   ├── dirls.out
│   └── Makefile
└── test_client

而我的Makefile模板代码如下:

SRCS = $(wildcard *.c ../lib/*.c)    #wildcard把 指定目录 ./ 和 ../lib 下的所有后缀是c的文件全部展开。

OBJS = $(SRCS:.c = .o)    #OBJS将$(SRCS)下的.c文件转化为.o文件

CC = gcc   #代表所使用的编译器

INCLUDES = -I../include \   #头文件查找路径
           -I. \

LIBS = -L../lib \   #链接库查找地址

CCFLAGS = -g -Wall -O0   #附加参数

OUTPUT = dirls.out   #输出程序名称

all:$(OUTPUT)

$(OUTPUT) : $(OBJS)
    $(CC) $^ -o $@ $(INCLUDES) $(LIBS)

%.o : %.c
    $(CC) -c $< $(CCFLAGS)

clean:
    rm -rf *.out *.o    #清除中间文件及生成文件

.PHONY:clean

另外附上别的网站的几个Makefile模板:

1、编译动态库

############################################################# 
# Makefile for shared library.
# 编译动态链接库
#############################################################
#set your own environment option
CC = g++
CC_FLAG = -D_NOMNG -D_FILELINE

#set your inc and lib
INC = 
LIB = -lpthread -L./ -lsvrtool

#make target lib and relevant obj 
PRG = libsvrtool.so
OBJ = Log.o

#all target
all:$(PRG)

$(PRG):$(OBJ)
    $(CC) -shared -o $@ $(OBJ) $(LIB)

.SUFFIXES: .c .o .cpp
.cpp.o:
    $(CC) $(CC_FLAG) $(INC) -c $*.cpp -o $*.o

.PRONY:clean
clean:
    @echo "Removing linked and compiled files......;
    rm -f $(OBJ) $(PRG)

2、编译静态库

#############################################################
# Makefile for static library.
# 编译静态链接库
#############################################################
#set your own environment option
CC = g++
CC_FLAG = -D_NOMNG -D_FILELINE

#static library use 'ar' command 
AR = ar

#set your inc and lib
INC = 
LIB = -lpthread -L./ -lsvrtool

#make target lib and relevant obj 
PRG = libsvrtool.a
OBJ = Log.o

#all target
all:$(PRG)
$(PRG):$(OBJ)
    ${AR} rv ${PRG} $?

.SUFFIXES: .c .o .cpp
.cpp.o:
    $(CC) $(CC_FLAG) $(INC) -c $*.cpp -o $*.o

.PRONY:clean
clean:
    @echo "Removing linked and compiled files......"
    rm -f $(OBJ) $(PRG)

3、可执行程序

###########################################
#Makefile for simple programs
###########################################
INC=
LIB= -lpthread

CC=CC
CC_FLAG=-Wall

PRG=threadpooltest
OBJ=CThreadManage.o CThreadPool.o CThread.o CWorkerThread.o threadpooltest.o

$(PRG):$(OBJ)
    $(CC) $(INC) $(LIB) -o $@ $(OBJ)
    
.SUFFIXES: .c .o .cpp
.cpp.o:
    $(CC) $(CC_FLAG) $(INC) -c $*.cpp -o $*.o

.PRONY:clean
clean:
    @echo "Removing linked and compiled files......"
    rm -f $(OBJ) $(PRG)

 

转载于:https://www.cnblogs.com/sysu-blackbear/p/4034394.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当编写一个通用Makefile 模板时,可以使用以下内容作为起点: ```makefile # 编译器 CC = gcc # 编译选项 CFLAGS = -Wall -Wextra -std=c99 # 目标文件夹 BUILD_DIR = build # 源文件夹 SRC_DIR = src # 源文件后缀 SRC_EXT = c # 获取所有源文件 SRCS = $(wildcard $(SRC_DIR)/*.$(SRC_EXT)) # 获取所有目标文件 OBJS = $(patsubst $(SRC_DIR)/%.$(SRC_EXT), $(BUILD_DIR)/%.o, $(SRCS)) # 目标可执行文件 TARGET = app # 默认目标 all: $(TARGET) # 编译目标文件 $(BUILD_DIR)/%.o: $(SRC_DIR)/%.$(SRC_EXT) mkdir -p $(BUILD_DIR) $(CC) $(CFLAGS) -c $< -o $@ # 构建可执行文件 $(TARGET): $(OBJS) $(CC) $(CFLAGS) $^ -o $@ # 清理生成的文件 clean: rm -rf $(BUILD_DIR) $(TARGET) .PHONY: all clean ``` 这个模板定义了以下几个变量和规则: - `CC`:编译器的名称,此处为 `gcc`,你可以根据需要修改为其他编译器。 - `CFLAGS`:编译选项,例如 `-Wall` 和 `-Wextra` 是常见的警告选项,`-std=c99` 指定了 C99 标准。 - `BUILD_DIR`:目标文件夹的名称,可以根据需要修改。 - `SRC_DIR`:源文件夹的名称,可以根据需要修改。 - `SRC_EXT`:源文件的扩展名,此处为 `c`,你可以根据需要修改为其他扩展名。 - `SRCS`:所有源文件的列表。 - `OBJS`:所有目标文件的列表。 - `TARGET`:可执行文件的名称。 - `all`:默认目标,依赖于 `$(TARGET)`。 - `$(BUILD_DIR)/%.o`:用于将源文件编译为目标文件的规则。 - `$(TARGET)`:构建可执行文件的规则。 - `clean`:清理生成的文件的规则。 使用模板时,将源文件放置在 `src` 文件夹中,然后运行 `make` 命令即可编译生成可执行文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值