首页 > 解决方案 > 具有多个子目录的 Makefile

问题描述

我们是否有一种有效的方法可以在 Makefile 中包含所有子目录,而不是使用 -I 选项包含每个目录?

例如下面是我的目录结构,其中源代码和标头分布在不同的子目录中。我在子目录中没有任何 Makefile,但只有一个顶级 Makefile。

|--> SRC 

     |--> scripts 
           |--- **Makefile**
     |--> lib
           |------*.c
           |------*.h
           |----> subdir
                   |------*.c
     |--> tests
           |---> block1
                  |------*.c                  
           |---> block2
                  |------*.c                
           |---> block3
                  |------*.c
                  |------*.h

标签: gccmakefile

解决方案


该请求是自动生成“-I”选项 - 每个包含“.h”头文件的文件夹一个。如果树的深度已知,则可以使用该wildcard函数。如果树的深度未知(或非常大),则可以使用“查找”命令。

下面的代码与顶级 Makefile 相关。表示 Makefile 存在于顶级文件夹中,但在scripts子文件夹中显示 Makefile

# Assuming max 2 level of header files
INC_LIST := $(addprefix -I, $(sort $(dir $(wildcard */*.h */*/*.h))))

对于无限深度的情况,使用find

INC_LIST = $(addprefix -I, $(sort $(dir $(shell find . -name '*.h'))))

推荐阅读