Makefile中的子目录和递归构建
  ssdBcskP7cCp 2023年12月22日 67 0


一 子目录规则

在多目录项目中,我们通常希望能够在每个子目录中维护独立的Makefile,并能够通过主目录的Makefile来主动调用子目录的Makefile。为此,我们需要在主Makefile中添加子目录规则

1 添加子目录规则

主Makefile中可以通过include关键字来引入子目录的Makefile。在主Makefile中添加子目录规则的语法如下:

include 子目录路径/Makefile

举例:

project/
|-- Makefile
|-- src/
| |-- main.c
| |-- utils.c
| |-- Makefile
|-- lib/
| |-- lib1.c
| |-- lib2.c
| |-- Makefile
在主目录Makefile中,我们可以使用以下方式添加子目录规则:
include src/Makefile
include lib/Makefile

子目录Makefile示例

在子目录的Makefile中,我们可以定义该子目录下的编译规则、依赖关系和目标文件等。例如,在src目录下的Makefile中,我们可以这样写:

# 定义源文件和目标文件
SRCS := main.c utils.c
OBJS := $(SRCS:.c=.o)

# 定义编译器和编译选项
CC := gcc
CFLAGS := -Wall -O2

# 定义目标文件
TARGET := myapp

# 定义编译规则
$(TARGET): $(OBJS)
    $(CC) $(CFLAGS) $^ -o $@

# 定义clean规则
clean:
    rm -f $(OBJS) $(TARGET)

2 递归构建

(某些情况下,可以省略 include 步骤)
在包含了子目录的Makefile后,我们可以通过递归调用make命令来构建子目录中的目标。为了在递归构建中传递变量,我们可以使用$(MAKE)变量。

递归构建示例
在主Makefile中,我们可以这样定义一个递归构建规则:

all:
    $(MAKE) -C src
    $(MAKE) -C lib

在上述示例中,Makefile中的子目录和递归构建_开发语言(MAKE) -C lib表示调用lib目录下的Makefile构建目标。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月22日 0

暂无评论

推荐阅读
ssdBcskP7cCp