要对子目录执行make,需要在当前目录制作一个Makefile,遍历所有子目录的Makefile,并运行相应的make target. 以下是我用来编译内核模块的一个Makefile
#
# Reference http://www.gnu.org/software/make/manual/make.html
#
# 需要排除的目录
exclude_dirs := include bin
# 取得当年子目录深度为1的所有目录名称
dirs := $(shell find . -maxdepth 1 -type d)
dirs := $(basename $(patsubst ./%,%,$(dirs)))
dirs := $(filter-out $(exclude_dirs),$(dirs))
# 避免clean子目录操作同名,加上_clean_前缀
SUBDIRS := $(dirs)
clean_dirs := $(addprefix _clean_,$(SUBDIRS) )
#
.PHONY: subdirs $(SUBDIRS) clean
# 执行默认make target
$(SUBDIRS):
$(MAKE) -C $@
subdirs: $(SUBDIRS)
# 执行clean
$(clean_dirs):
$(MAKE) -C $(patsubst _clean_%,%,$@) clean
clean: $(clean_dirs)
@find . \
\( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
-o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
-o -name '*.symtypes' \) \
-type f -print | xargs rm -f
分享到:
相关推荐
6. 递归:程序通过递归调用自身,每次处理一个目录并进入其子目录,直到遍历完整个目录树。 7. 文件权限和所有权:理解`chmod`, `chown`, `chgrp`等命令及`rwx`权限模式,这对于遍历过程中可能涉及的文件访问控制至...
Makefile自动搜所目录及子目录下的的所有文件、自动生成编译目录,主要实现的功能入校描述: 1. myMath、myRecord、myString要分别能够单独生成各自对应的 .a 静态库文件 2. 将生成的 .a 文件统一放在根目录下 lib ...
- **变量统一**:为了保持一致性,可能会定义一些全局变量,如CFLAGS(C编译器选项)和LDFLAGS(链接器选项),在子目录Makefile中引用这些变量。 - **清理规则**:确保每个子目录的Makefile都有清理规则,如`clean:...
这符合许多软件项目结构,通常Makefile位于项目根目录,或者至少在一个包含源代码的子目录中。找到Makefile后,插件会调用系统上的`make`命令来编译或构建项目,这对于频繁进行编译测试的开发者来说非常方便。 标签...
- 子目录Makefile:每个源代码子目录都有自己的Makefile,用于管理该目录下的文件。 - Kconfig文件:用于设置内核配置,通过menuconfig等工具生成.config文件,影响Makefile的行为。 ### 3. 内核编译文件 内核编译...
Makefile的概念 Make的调用格式 Makefile的基本格式 Makefile的扩展话题 常见项目的Makefile格式 直接编译 遍历子目录 autoconf生成形
遍历子目录时,需要使用特殊的目标和命令来处理子目录中的Makefile。 5. Automake/autoconf:开源软件构建软件automake和autoconf,通常用于生成Makefile。Autoconf能够解析configure.in文件来创建configure脚本,...
该函数可以遍历一个列表并应用某个函数。 ```makefile OBJS := $(foreach src,$(SRCS),$(patsubst %.c,%.o,$(src))) ``` 5. **if函数**: 用于进行条件判断。 ```makefile ifeq ($(DEBUG),yes) CFLAGS += -...
在描述中提到的`Makefile`实现了一个遍历文件夹的功能,这意味着它能够处理复杂目录结构下的源文件。通常,这涉及到使用`find`命令或者编写递归规则来搜索子目录中的`.c`文件。例如,一个简单的`find`命令可能如下:...
在Makefile中调用另一个make过程,用于处理子目录或其他复杂的构建需求。 ##### 五、定义命令包 有时候,我们需要将一组相关的命令封装在一起作为一个整体使用。 #### 第七部分:使用变量 ##### 一、变量的基础 ...
`.EXPORT_ALL_VARIABLES`是一个特殊的目标,它的存在意味着Makefile中定义的所有变量都会被导出到包含的Makefile文件中,以便它们能够访问这些变量。 2. **变量定义** ```makefile ROOTDIR=$(shell pwd) TOOLS...
4. **嵌套执行 make**:可以在 Makefile 中调用 `make` 命令来递归地构建子目录。例如: ```makefile subdirs = dir1 dir2 all: $(subdirs) .PHONY: $(subdirs) %: (cd $@ && make) ``` 5. **定义命令包**:...
首先,本文提供的示例脚本名为genMakefile.py,它使用Python的标准库os和sys来遍历当前目录下的文件,并根据这些文件生成一个Makefile。脚本的作者是Mike,提供的联系方式为Mike_***,这表明脚本主要用于教育和交流...
- **文件搜寻**:make会根据当前目录和路径变量中的目录来查找文件。 - **伪目标**:没有对应的文件,主要用于执行命令,如`all`、`clean`等。 - **多目标**:可以定义多个目标在一个规则中。 - **静态模式**:允许...
- **重载另一个makefile**:有时在构建过程中可能需要动态地改变构建规则,这可以通过重载一个新的makefile来实现。 - **make如何解析makefile文件**:make会依次解析Makefile文件,执行其中的规则,并处理相关的...
它是一个复杂的构建框架,由多个Makefile文件组成,协同工作以确保内核代码的正确编译和链接。以下是对Kernel Makefile结构的详细解析: ### Kernel Makefile结构 1. **顶级Makefile**: 这是整个构建系统的起点,...
通用Makefile是C++编程中一个非常重要的工具,它是一个自动化构建系统,用于编译、链接和管理项目中的源代码文件。在C++开发中,Makefile能够大大提高开发效率,因为它能够自动跟踪依赖关系,执行编译命令,使得...
- 有时需要在一个Makefile中调用另一个Makefile。 - 例如:`make -C subdirectory`可以在子目录中执行`make`。 - **定义命令包**: - 可以通过定义函数来组合多个命令。 - 函数可以接受参数,并在Makefile中多...