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