makefile 和 sh 文件有啥区别

Posted

技术标签:

【中文标题】makefile 和 sh 文件有啥区别【英文标题】:What is the difference between makefile and sh filemakefile 和 sh 文件有什么区别 【发布时间】:2014-04-30 00:14:04 【问题描述】:

makefile 和 sh 文件有什么区别。 sh(壳 脚本文件)文件也可以在makefile的地方工作(意味着我们可以 使用像makefile这样的shell文件做同样的事情)然后是什么 他们之间的区别。有任何执行差异或任何 我们必须使用 makefile 和 sh 文件的标准。

使用 Makefile 和 shell 文件编译 hello.c 文件的一个示例

shell.sh

param="$1";

CC="gcc"

CFLAGS="-c -Wall";

if [ "$param" == "clean" ];

then

 rm -rf hello

else

$CC $CFLAGS hello.c -o hello

fi
    ./shell.sh 将构建 hello.c 文件 ./shell.sh clean 这将清理构建文件

Makefile 也是如此。

CC=gcc

CFLAGS=-c -Wall

hello: hello.c
        $(CC) $(CFLAGS) hello.c -o hello

clean:
        rm -rf hello 

make 它将构建make clean 它将清理构建文件

两个文件可以生成相同的输出。 这个问题是因为有些人使用Makefile,有些人使用shell..

【问题讨论】:

这就像说所有的编程语言都是一样的,因为它们都是图灵完备的。 【参考方案1】:

make 自动检查(基于时间戳)哪些目标需要重新制作,哪些可以保持不变。如果您编写自己的 shell 脚本,则必须自己编写此逻辑,否则在您运行脚本时将重新构建所有组件 - 甚至是自上次构建以来未更改的组件。

【讨论】:

以上是关于makefile 和 sh 文件有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

android.mk makefile 有啥区别

Makefile 中的 := 和 = 有啥区别?

GNU Makefile 变量赋值 =、?=、:= 和 += 有啥区别?

makefile 中的 -I 和 -L 有啥区别?

Makefile 中的括号 $() 和大括号 $ 语法有啥区别?

Makefile 中的 $(objs): %.o : %.cpp 和 $(objs): $(objs:.o=.cpp) 有啥区别