makefile调用所有子目录makefile

author author     2022-09-21     526

关键词:

在网上找了很多,没有一个能拿过来直接用的

makefile调用所有子目录makefile

顶层makefile代码

SUBDIRS = $(shell find . * -type d | grep -v ".")

.PHONY:all clean

all:
        @for subdir in $(SUBDIRS); do                   $(MAKE) -C $$subdir;            done

clean:
        @for subdir in $(SUBDIRS); do                   $(MAKE) -C $$subdir clean;        done

说明:

1. 使用shell find方法调出当前目录所有子目录

$(shell find . * -type d | grep -v ".")

备注:

  -type表示类型,d是directory文件夹

  *是所有内容,在makefile里给*加上“”会报错

  如果没有用grep去除多级目录,则会产生以下效果

find . * -type d
.
./02
./03
./001
001
02
03

  使用grep -v去除所有.开头的项目,.需要以转义字符写为.,否则自动匹配正则表达式,会剔除所有内容

2. 使用隐式数组获取上述所有结果

SUBDIRS = $(shell find . * -type d | grep -v ".")

不是subdirs本身是隐式数组,是这种方法,可以让subdirs变量变成一个数组变量,把线性的find结果直接当数组在for里面用,也就是说subdirs本身其实是

 

dir1
dir2
dir3

 

这么个隐式数组

3. 使用for循环遍历所有目录

all:
        @for subdir in $(SUBDIRS); do                   $(MAKE) -C $$subdir;            done

备注:

  如果是复制过去的,考虑8个空格和tab的问题,MAKEFILE中使用tab开头以执行动作

  注意$(MAKE) -C $$subdir是比较有用的自动推导的方法

    如果是想make就$(MAKE) -C $$subdir,如果想clean就加上clean(同理如果有别的目标也可以指令,但是这样会对所有子makefile生效,子makefile如果找不到目标就exit:1)

  两个伪目标 all clean对应子makefile中的默认make和clean,保持整齐。

  makefile使用c语言的规则,空格和换行表示一段结束

  也就是说,dir1 dir2 dir3能够被for subdir in xxx识别为三个元素,

  dir1

  dir2

  dir3也能被识别为三个元素(我上面写的subdir=$(shell find 。。。)就是用的回车方法,因为在bash里执行的结果是换行

  但是,如果subdir = "dir1 dir2 dir3",就表示只有一个文件夹了

  因为字符串连成一片了,如果想拆开可以使用cut 指令,具体方法可以man cut试试看

依赖于目录下所有文件(包括子目录内)的 Makefile 规则

】依赖于目录下所有文件(包括子目录内)的Makefile规则【英文标题】:Makefilerulethatdependsonallfilesunderadirectory(includingwithinsubdirectories)【发布时间】:2012-12-2616:55:24【问题描述】:我的Makefile中的一条规则将整个目录(res/)压缩到ZIP... 查看详情

使用 makefile 和子目录

】使用makefile和子目录【英文标题】:Workingwithmakefileandsubdirectories【发布时间】:2017-03-0800:22:18【问题描述】:我正在尝试弄清楚如何。但不幸到现在。我想将所有.o文件放在“build”子目录中,所有.cpp都应该放在“src”中,可... 查看详情

makefile学习笔记系列4:makefile模板化(代码片段)

...ps://blog.csdn.net/u010312436/article/details/52461906中已经实现具有子目录层次结构的makefile写法,即主目录Makefile调用到每个子目录中的Makefile编译相应子目录的代码。但是每增加一个子目录又得为这个子目录添加一个为该子目录编译... 查看详情

自动编译当前目录下所有文件的makefile

...一个项目中使用的Makefile.脚本会自动搜索当前目录下所有子目录,并依据目录下的.c和.cxx生成对应的.o,最后生成应用application,代码中删除了项目相关配置,如CFLAGS,LDFLAGS,CXXFLAGS中的gcc配置欢迎转载,烦请添加链接,谢谢!1SHELL=/... 查看详情

makefile--隐式规则

参考技术A示例2--makefile中出现同名命令注意事项示例3--使用include关键字时,出现同名命令makefile文件与1.mk文件位于同一个目录下makefile1.mkfunc.cmain.cmakefilemakefile等价于下面的文件从以上makefile执行结果可以看到,CC、RM、以及%.o:%.c... 查看详情

makefile学习笔记系列4:makefile模板化(代码片段)

...ps://blog.csdn.net/u010312436/article/details/52461906中已经实现具有子目录层次结构的makefile写法,即主目录Makefile调用到每个子目录中的Makefile编译相应子目录的代码。但是每增加一个子目录又得为这个子目录添加一个为该子目录编译... 查看详情

makefile:如何生成目标文件到上层目录

】makefile:如何生成目标文件到上层目录【英文标题】:makefile:howtogenerateobjectfilestoupperdirectory【发布时间】:2017-04-0421:08:16【问题描述】:我有一个makefile,如下,可以编译链接同一目录下的所有cpp文件:g++1x:=g++-std=c++14-stdlib=lib... 查看详情

Makefile - 从多个目录构建

】Makefile-从多个目录构建【英文标题】:Makefile-buildfrommultipledirectories【发布时间】:2021-08-1800:27:31【问题描述】:我是Makefile新手。我有一串多个目录,我想编译其中的所有.c文件。该字符串中的路径数可以更改(它作为来自脚... 查看详情

如何从makefile更改目录并执行子目录make file?

】如何从makefile更改目录并执行子目录makefile?【英文标题】:howtochangedirectoriesfrommakefileandexecutesubdirectoriesmakefile?【发布时间】:2015-07-1406:25:39【问题描述】:假设A有两个子目录B和C,每个子目录都有自己的make文件。父A有自己... 查看详情

Makefile:可以将 VPATH 变量应用于分配 Makefile 变量吗?

】Makefile:可以将VPATH变量应用于分配Makefile变量吗?【英文标题】:Makefile:CanVPATHvariableisappliedtoassigningMakefilevariable?【发布时间】:2015-11-2912:42:52【问题描述】:我尝试编写简单的makefile来练习。我有两个目录1.srcs(.c),2.include(.h)... 查看详情

makefile常用写法(代码片段)

这里写目录标题一、常规编译c语言语句二、初级使用Makefile1.在需要编译的项目的根目录下建立文件makefile2.打开makefile3.编写文件4.执行makefile三、进阶使用makefile1.多个c文件需要编译为一个可执行文件2.编译完成后删除所有的.o文... 查看详情

makefile调用makefile错误

】makefile调用makefile错误【英文标题】:makefilecallingmakefileerror【发布时间】:2008-11-2022:07:01【问题描述】:我有一个有效的品牌,我有平台代码,并且喜欢文件夹中每个操作系统的几个品牌。现在我有一个可以工作的makefile。我... 查看详情

第4课.编写通用的makefile(代码片段)

1.框架1.顶层目录的Makefile2.顶层目录的Makefile.build3.各级子目录的Makefile2.概述1.各级子目录的Makefile:它最简单,形式如下:obj-y+=file.oobj-y+=subdir/"obj-y+=file.o"表示把当前目录下的file.c编进程序里,"obj-y+=subdir/"表示要... 查看详情

如何让makefile执行的时候打印所有命令

很简单啊,不知道你都要打印些啥,反正只要你把要打印的代码都能通过主方法“main()”调用就可以了参考技术A可是Makefile执行时本来就会打印啊?除非命令前面加了@. 查看详情

一点一点学写makefile-自动搜所当前目录下的所有源文件

上个博客我们使用的是笨方法添加源文件,本次我要实现的是遍历文件夹来获得所有的cpp文件[plain]viewplaincopy//makefile      CROSS =   CC = $(CROSS)gcc  CXX = $(CROSS 查看详情

[makefile]多目录makefile写法

...成一些功能,写在同一个文件看上去很不好,多个文件的Makefile又不是很熟,于是分享下面这篇文章转自:http://blog.csdn.net/yuzhihui_no1/article/details/44810357 前面已经分享了单目录项下多文件的makefile的编写,现在来看看多目录下... 查看详情

makefile步步为营(代码片段)

Makefile步步为营本目录主要包含Makefile一步步递进学习的示例代码makefile代码实例:https://www.lanzous.com/i9m9npistep0:Makefile小实验进行Makefile小实验,体验Makefile的功能。目录中的Makefile是不严谨的编写方式。目录中的Makefile_PHONY是严谨... 查看详情

5.16下午阅读813单词

Makefile之执行过程  1.依次读取变量“MAKEFILES”定义的makefile文件列表   2.读取工作目录下的makefile文件(根据命名的查找顺序“GNUmakefile”,“makefile”,“Makefile”,首先找到那个就读取那个)   3.依次读取工作目... 查看详情