16、构建与算术:GNU make的实用技巧与挑战
2026/5/9 19:21:45 网站建设 项目流程

构建与算术:GNU make的实用技巧与挑战

1. 构建过程中的处理器与加速问题

在小型构建任务中,处理器数量与最大加速比存在一定关系。以下是相关数据:
| 处理器数量 | 最大加速比 |
| — | — |
| 10 | 2.46x |
| 11 | 2.50x |
| 12 | 2.53x |

根据阿姆达尔定律,对于这个小型构建,大约从8个处理器开始,最大加速比会趋于平稳。而实际的平稳状态还受到构建中只有13个可能任务的限制。

从构建结构来看,最多使用8个处理器。原因在于有5个任务(t1、t2、t4、t6和t7)可以无依赖地并行运行,另外有3组小的任务链(t3、t5和t8;t9和t10;t11和t12),每组每次使用一个处理器。构建任务t可以复用8个处理器中的一个,因为此时它们都处于空闲状态。

在实际应用中,像C和C++这类有链接步骤的语言,阿姆达尔定律会显著影响构建时间。通常,所有目标文件在链接步骤之前构建完成,然后需要运行一个(通常很大的)单一链接过程。这个链接过程往往无法并行化,成为构建并行化的限制因素。

2. 让 $(wildcard) 函数递归搜索

内置的 $(wildcard) 函数不是递归的,它只能在单个目录中搜索文件。不过,可以在 $(wildcard) 中使用多个通配符模式来搜索子目录。例如,$(wildcard/.c) 可以查找当前目录所有子目录下的所有 .c 文件。但如果需要搜索任意目录树,就没有内置的方法。

幸运的是,创建 $(wildcard) 的递归版本很容易,代码如下:

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询