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

时间:2014-02-04 09:28:12

标签: c unix makefile

编译以下程序

#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怎么样看起来好像?提前感谢:)“

4 个答案:

答案 0 :(得分:10)

这是你的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

假设您在一个名为makefilesmakefile.m1的目录中有两个makefile.m2,如果您想构建两个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也不是你自己可以使用你想要的任何东西,但永远不会忘记使用-f选项。

所以这对你有意义。

答案 1 :(得分:8)

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 Standard for the make utility部分默认规则

答案 2 :(得分:4)

在去makefile之前,你必须知道它是什么以及为什么我们需要它

什么是Makefile?

Makefile是一个用某种规定语法编写的脚本,它有助于通过编译和链接从源文件构建目标输出(通常是一个或多个可执行文件)。简单来说,makefile将简单地编译你的源代码。快捷的方式。 为什么我们需要Makefile?

=&GT;大型项目可以包含多个源文件,这些源文件相互依赖或以分层方式排列,例如,为了编译文件A,您必须先编译B;为了编译B,你必须先编译C;等等。

=&GT; Make是这些问题的解决方案。它可用于以良好的方式编译整个项目,并通过输入make命令生成您的目标(我们将在后面讨论)。

=&GT;一个重要的特性是,在几次更改后重新编译项目时,它将仅重新编译那些已更改的文件以及依赖于它的任何其他文件。这节省了大量时间。

=&GT;对于大型项目,当对源进行一些更改时,每次手动重新编译整个项目都是繁琐,容易出错且耗时的。

这是一个很好的链接:How to write first makefile

答案 3 :(得分:1)

makefile是计算机的配方,包含如何执行某些任务以及这些任务之间的依赖关系的说明。

在简单的形式中,它看起来像这样:

a.out: filename.c
        gcc filename.c

阅读:“要从a.out构建filename.c,请运行gcc filename.c命令。如果a.outfilename.c更新,则不要执行任何操作“

注意:gcc中的第一个字符必须为标签。