快速构建工具并制定替代方案?

Fast build tools and make alternatives?

我是初学者 C 程序员,我有一个不是很大的 C 项目。 我编写了简单的 perl 脚本来使用不同的选项构建它。而且我的项目没有拆分成目标文件,我只是将 .c 相互包含在一起,并通过一次编译器调用构建。

但是我的项目越来越大,编译时间达到了 1s+(我喜欢脚本式调试,有很多小改动 && 运行 步骤),所以我决定将我的项目拆分成目标文件,link 将它们放在一起并使用 gnu make 检查源代码是否已更改,就像每个人一样。

我预计这将使构建速度更快。但不是! make 太慢了,它使编译更慢了好几次,我什至还没有完全拆分我的项目(每个 .c 文件一个 .o),只有大约 5 个目标文件(项目有大约 20 个 .c 文件)! 当 .c 文件刚刚包含在彼此中时,make 检查文件是否发生更改比重建整个项目更慢或几乎相同!

所以现在我只使用增强版的 perl 脚本 "build system"。我将项目分成几个大的部分并只重建其中一个(其他大部分是第 3 方库)并且它工作得非常快。此外,它比 makefile 更灵活、更易于管理,因为我有很多构建选项,包括交叉编译。但这是在重新发明自行车。

将所有 c 文件相互包含不是最佳做法,是吗? 我应该使用什么?

我想将这个问题命名为 "Why make is so slow?" 但我知道为什么 - 为每个代码行启动 shell 是一项繁重的任务。也许对于真正的大项目来说它工作正常,但对我来说它有太多的开销。

那么管理 C 项目的最佳实践和工具是什么?哪些构建工具快速且灵活? 我不希望每一步都像 make-like 废话一样分叉,即使使用多个内核,构建速度也比天真的 include-all-into-one-file 慢

我建议您尝试将 CMake 与忍者生成器结合使用。

Ninja 比 make 快很多,CMake 使配置项目变得容易。