让我觉得简单的shell脚本更容易处理命令行参数。
为什么运行make代替./make.sh
是标准的答案 0 :(得分:101)
一般的想法是make
支持(合理地)最小化重建 - 即,你告诉它你的程序的哪些部分依赖于其他部分。当您更新程序的某些部分时,仅重建依赖于该程序的部分。虽然可以使用shell脚本执行此操作,但它将是 lot 更多工作(显式检查所有文件上的最后修改日期等)唯一明显的使用shell脚本的替代方案是每次都重建所有内容。对于小型项目,这是一种非常合理的方法,但对于一个大型项目,完全重建可能需要一个小时或更长时间 - 使用make
,您可以在一两分钟内轻松完成同样的事情...... / p>
答案 1 :(得分:54)
使用shell脚本很难做出各种各样的事情......
答案 2 :(得分:7)
确保在更改源文件时仅重新编译所需的文件。
例如:
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
,它只以相反的顺序执行前2个命令。
尝试使用自己的shell脚本完成此操作将涉及大量if/else
检查。
答案 3 :(得分:6)
与上面一样,Make是一种声明性(-ish)并行编程语言。
假设您有4,000个要转换的图形文件和4个CPU。尝试编写一个10行的shell脚本(我在这里很慷慨),它可以在使CPU饱和的情况下可靠地完成它。
也许真正的问题是人们为什么要编写shell脚本。
答案 4 :(得分:3)
make handle dependencies:makefile描述它们:二进制文件依赖于目标文件,每个目标文件依赖于源文件和头文件...当make运行时,比较文件的日期以确定需要什么重新编译。
可以直接调用一个目标,不构建Makefile中描述的所有内容。
此外,make语法提供了substitute,vpath
所有这些都可以用shell脚本编写,让你已经拥有它。