Makefile多个目录下的编译

本文介绍了如何在Makefile中使用notdir,wildcard和patsubst函数处理多个目录下的编译任务,包括源文件、目标文件和头文件的管理,以及编译规则和清理目标的编写。
摘要由CSDN通过智能技术生成

Makefile多个目录下的编译

notdir函数

otdir函数用于去除文件路径中的目录部分。它的格式如下:

$(notdir 文件名)

wildcard函数

wildcard函数用于获取文件列表,并使用空格分隔开。它的格式如下:

$(wildcard 匹配规则)

patsubst函数

patsubst函数功能为模式字符串替换。它的格式如下:

$(patsubst 匹配规则, 替换规则, 输入的字符串)

实例

源码文件目录格式如下:
在这里插入图片描述

#定义变量
TARGET = hello_main
#存放中间文件的路径
BUILD_DIR = build
#存放源文件的文件夹
SRC_DIR = sources
#存放头文件的文件夹
INC_DIR = includes .
#源文件
SRCS = $(wildcard $(SRC_DIR)/*.c)		//把sources文件夹下后缀为.c的文件用SRCS表示
#目标文件(*.o)
OBJS = $(patsubst %.c, $(BUILD_DIR)/%.o, $(notdir $(SRCS)))		//把SRCS中后缀为.c的文件放在build目录下后缀改为.o
#头文件
DEPS = $(wildcard $(INC_DIR)/*.h)		//将includes目录下后缀为.h的文件用DEPS表示
#指定头文件的路径
CFLAGS = $(patsubst %, -I%, $(INC_DIR))		//指定头文件的目录用CFLAGS表示

#目标文件
$(BUILD_DIR)/$(TARGET): $(OBJS)	
	$(CC) -o $@ $^ $(CFLAGS)

#*.o文件的生成规则
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c $(DEPS)

#创建一个编译目录,用于存放过程文件
#命令前带“@”,表示不在终端上输出
	@mkdir -p $(BUILD_DIR)
	$(CC) -c -o $@ $< $(CFLAGS)

#伪目标
.PHONY: clean cleanall

#删除输出文件夹
clean:
	rm -rf $(BUILD_DIR)
      
#全部删除
cleanall:
	rm -rf $(BUILD_DIR)

在test8目录下make:
在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于多目录和头文件编译,可以使用Makefile来管理和编译代码。 以下是一个例子: ``` # Makefile # 设置编译器和编译选项 CC = g++ CFLAGS = -Wall -g # 设置源文件目录和头文件目录 SRCDIR = src INCDIR = include # 设置目标文件目录和可执行文件目录 OBJDIR = obj BINDIR = bin # 设置目标文件和可执行文件名称 TARGET = program OBJS = $(OBJDIR)/main.o $(OBJDIR)/func.o # 编译规则 all: $(BINDIR)/$(TARGET) $(BINDIR)/$(TARGET): $(OBJS) $(CC) $(CFLAGS) $(OBJS) -o $@ $(OBJDIR)/%.o: $(SRCDIR)/%.cpp $(CC) $(CFLAGS) -c $< -o $@ -I $(INCDIR) # 清理规则 clean: rm -rf $(OBJDIR)/*.o $(BINDIR)/$(TARGET) ``` 在这个例子中,我们假设有以下目录结构: ``` project/ ├── Makefile ├── include/ │ └── func.h └── src/ ├── main.cpp └── func.cpp ``` 其中,`include/`存放头文件,`src/`存放源文件。使用Makefile编译时,会将编译生成的目标文件放在`obj/`目录中,将可执行文件放在`bin/`目录中。 Makefile中,`SRCDIR`和`INCDIR`分别指向源文件目录和头文件目录。在编译规则中,使用`-I`选项指定头文件目录。`OBJS`中的目标文件路径是相对于`OBJDIR`的。 在编译时,Makefile会按照`SRCDIR`和`INCDIR`中指定的路径查找源文件和头文件。生成的目标文件和可执行文件会放在`OBJDIR`和`BINDIR`中指定的目录中。 使用命令`make`即可编译生成可执行文件。使用命令`make clean`可以清除生成的目标文件和可执行文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值