编译以下程序
#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怎么样看起来好像?提前感谢:)“
答案 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
假设您在一个名为makefiles
和makefile.m1
的目录中有两个makefile.m2
,如果您想构建两个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
也不是你自己可以使用你想要的任何东西,但永远不会忘记使用-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.out
比filename.c
更新,则不要执行任何操作“
注意:gcc
行中的第一个字符必须为标签。