gcc - 具有多个子目录的 Makefile
问题描述
我们是否有一种有效的方法可以在 Makefile 中包含所有子目录,而不是使用 -I 选项包含每个目录?
例如下面是我的目录结构,其中源代码和标头分布在不同的子目录中。我在子目录中没有任何 Makefile,但只有一个顶级 Makefile。
|--> SRC
|--> scripts
|--- **Makefile**
|--> lib
|------*.c
|------*.h
|----> subdir
|------*.c
|--> tests
|---> block1
|------*.c
|---> block2
|------*.c
|---> block3
|------*.c
|------*.h
解决方案
该请求是自动生成“-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'))))
推荐阅读
- python - 使用按钮更新 dash 数据表
- c# - C# 中的 XSLT 转换 - 如何获取包含文档的有效 URL?
- swift - 在 swiftUI 中创建表单究竟意味着什么?
- c# - 将 MySql 数据库中的 JSON 列映射到 Web Api 中的 C# 类
- git - Bitbucket 未克隆所有文件夹
- php - Symfony / php:避免查询以提供嵌套的json对象从一对多关系
- terraform - 将现有作业 Rundeck 转换为 .tfstate
- amazon-web-services - AWS EC2 t3.micro 实例对于 Spring Boot 服务足够稳定
- winforms - 从 Windows 窗体应用程序向 Unity 发送消息
- postgresql - 如何优化 Postgres 中多个表(5000 万行)的联接和合并的运行时