Answers:
通常的想法是make
(合理地)支持最小限度的重建-即,您告诉它程序的哪些部分取决于其他部分。当您更新程序的某些部分时,它仅重建依赖于该部分的部分。虽然你可以做到这一点有一个shell脚本,这将是一个很大更多的工作(显式检查上的所有文件,等等。最后修改日期)与shell脚本的唯一明显的办法是每次重建一切。对于小型项目,这是一种完全合理的方法,但是对于大型项目,完整的重建可能很容易花费一个小时或更长时间-使用make
,您可能会在一两分钟之内轻松完成同一件事...
我可能还应该补充说,有很多替代方案可以使它们至少具有大致相似的功能。尤其是在仅重建大型项目中的几个文件的情况下,其中一些文件(例如Ninja)通常比make快得多。
使用shell脚本很难完成很多事情...
Make确保在更改源文件时仅重新编译所需的文件。
例如:
final : 1.o 2.o
gcc -o final 1.o 2.o
1.o : 1.c 2.h
gcc -c 1.c
2.o : 2.c 2.h
gcc -c 2.c
如果我2.h
仅更改文件并运行make
,它将以相反的顺序执行所有3条命令。
如果我1.c
仅更改文件并运行make
,它将仅以相反的顺序执行前两个命令。
尝试使用您自己的shell脚本来实现这一点将涉及很多if/else
检查。
rsync -r -c -I $SOURCE $DEST_DIR
在shell中使用类似的东西。
和上面一样,Make是一种声明性(-ish)并行编程语言。
假设您有4,000个要转换的图形文件和4个CPU。尝试编写一个10行的shell脚本(我在这里很慷慨),可以在使CPU饱和的同时可靠地执行此操作。
也许真正的问题是人们为什么要花时间编写Shell脚本。