[英]How to write a Makefile to compile a simple C program
编译以下程序
#include <stdio.h>
int main(void)
{
printf ("Hello from your first program!\n");
return 0;
}
a)-by使用Makefile类型的文件
b) - 可执行文件将命名为Hello
“请帮忙做一个练习。我知道如何在CodeBlocks中做到这一点,但我不知道Makefile是什么以及如何在Linux中编写它。我使用命令”gcc filename.c“编译它,随后”./ a.out“但我仍然不明白Makefile是什么。它是一种shell脚本,一条指令吗?这个任务的Makefile怎么样看起来好像?提前感谢:)”
这是你的hello程序的简单make文件。
CC = gcc
CFLAGS = -g
RM = rm -f
default: all
all: Hello
Hello: Hello.c
$(CC) $(CFLAGS) -o Hello Hello.c
clean veryclean:
$(RM) Hello
假设你在一个名为makefile.m1
和makefile.m2
目录中有两个makefiles
,如果你想构建make文件那么请使用下面的命令
make -f makefile.m1
make -f makefile.m2
或使用包含以下内容的单个Makefile
:
m1:
make -f makefile.m1
m2:
make -f makefile.m2
并使用make m1
或make m2
现在让我们清楚你对make文件名称的疑问一定不要要求Makefile
您可以根据需要为makefile命名。 假设我想给名字myfirstmakefile.mk
。 要在以后使用它,你需要告诉make你想要什么makefile。 使用-f选项:
make -f myfirstmakefile.mk
再次说明.mk
也不是manadatory你可以使用你想要的任何东西,但永远不会忘记使用-f
选项。
所以这对你有意义。
makefile是make
实用程序的一个配方,如何使用shell运行的一组命令从其他一些文件(称为依赖项)创建一些文件(称为目标 )。 makefile通常如下所示:
target: dependency [...]
command1
command2
尝试运行man make
以获取详细信息。
现在,对于您的任务,实际上不需要Makefile,因为make
具有内置规则,知道如何编译简单程序。 您需要做的就是将C源放在以可执行文件名( Hello
)和.c
扩展名命名的文件中,即Hello.c
。
那么简单
$ make Hello
cc Hello.c -o Hello
做一切。 如果你想使用gcc而不是cc,你可以运行
$ rm Hello
$ make CC=gcc Hello
gcc Hello.c -o Hello
如果你告诉你的教练/老师/教授你需要一个空的makefile,因为你知道内置的规则是正确的,你会得到一些额外的功劳,也许你的导师已经学到了新东西:-)如果你要求提供参考,您可以引用制作手册的相关部分,或者像专业人士那样,从制造实用程序的POSIX标准引用默认规则部分。
在去makefile之前你必须知道它是什么以及为什么我们需要它
什么是Makefile?
Makefile是一个用某种规定语法编写的脚本,它有助于通过编译和链接从源文件构建目标输出(通常是一个或多个可执行文件)。 简单来说,makefile将以简单快捷的方式编译您的源代码。 为什么我们需要Makefile?
=>大型项目可以包含多个源文件,这些源文件相互依赖或以分层方式排列,例如,为了编译文件A,您必须先编译B; 为了编译B,你必须先编译C; 等等。
=> Make是解决这些问题的方法。 它可以用来以良好的方式编译整个项目,并根据你的make规则生成你的目标(我们将在后面讨论),输入make命令。
=>一个重要的特性是,在几次更改后重新编译项目时,它将仅重新编译那些已更改的文件以及依赖于它的任何其他文件。 这节省了大量时间。
=>对于大型项目,当对源进行一些更改时,每次手动重新编译整个项目都是繁琐,容易出错且耗时的。
这是一个很好的链接: 如何编写第一个makefile
makefile是计算机的配方,具有如何执行某些任务以及这些任务之间的依赖关系的指令。
在简单的形式中,它看起来像这样:
a.out: filename.c
gcc filename.c
阅读:“要从filename.c
构建a.out
,运行命令gcc filename.c
。如果a.out
比filename.c
更新,则不要执行任何操作”
注意: gcc
行中的第一个字符必须是制表符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.