繁体   English   中英

如何编写Makefile来编译一个简单的C程序

[英]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.m1makefile.m2目录中有两个makefiles ,如果你想构建make文件那么请使用下面的命令

make -f makefile.m1
make -f makefile.m2

或使用包含以下内容的单个Makefile

m1:
  make -f makefile.m1

m2:
  make -f makefile.m2

并使用make m1make m2

现在让我们清楚你对make文件名称的疑问一定不要要求Makefile

您可以根据需要为makefile命名。 假设我想给名字myfirstmakefile.mk 要在以后使用它,你需要告诉make你想要什么makefile。 使用-f选项:

make -f myfirstmakefile.mk

再次说明.mk也不是manadatory你可以使用你想要的任何东西,但永远不会忘记使用-f选项。

所以这对你有意义。

makefilemake实用程序的一个配方,如何使用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.outfilename.c更新,则不要执行任何操作”

注意: gcc行中的第一个字符必须是制表符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM