make和makefile的使用方法

make和makefile的使用方法,第1张

在大型项目开发中,通常有几十到上百个源文件,如果每次均手工键入gcc 命令进行编译的话,非常不方便,我们就思考,能不能用一个命令完成多个动作——这就是make的用处。

make工具通过makefile文件来完成并自动维护编译工作:我们可以用vi makefile来创建makefile文件,通过makefile文件的内容告诉make要做什么。

默认情况下,GNU make工具在当前工作目录中寻找makefile时,它会尝试以下几个名称(按顺序排列):GNUmakefile、makefile 和 Makefile,不建议使用GNUmakefile,有些版本的make可能不承认这个名称。

我们也可以选择给makefile使用一个自己指定的名字,可以用’-f’或’–file’选项来指定makefile的名称:用参数’-f NAME’或’–file=NAME’告诉’make’读取文件NAME作为makefile。

一个简单的makefile格式如下:

 TARGET ... : DEPENDENCY ...
 	COMMAND

注意:这里COMMAND前面一定是Tab,即使按了8次Space键视觉效果看起来一样也会报错(missing separator (did you mean TAB instead of 8 spaces?)。如果是复制代码再粘贴,也可能会出现这个问题,这就需要删掉代码里的空格重新输入Tab。

TARGET
目标体,通常是一个由程序生成的文件的名称;目标体可以是可执行文件或目标文件,也可以是一个要执行的动作的名称,例如伪目标“clean”。
DEPENDENCY
目标体所依赖的文件,它被用来作为输入来创建目标。 一个目标经常依赖于几个文件。
COMMAND
所创建的目标体需要运行的命令,是 "make "执行的一个动作。 一个command可以有一个以上的命令,可以在同一行,也可以在各自的行中。

举个例子,我们先写一个名为“hello.c”的程序

#include
int main()
{
printf("Hello World!\n");
return 0;
}

再使用vi makefile命令创建一个名为makefile的新文件,按“i”进入编辑模式插入文本,输入下列代码(注意Tab! Tab! Tab! 的问题)

hello.o:hello.c
        gcc -c hello.c -o hello.o
hello:hello.o
        gcc hello.o -o hello

这里hello.o就是第一个目标体,hello.c是它依赖的文件(执行第一个命令需要的文件);
hello是第二个目标体,hello.o是它依赖的文件(执行第二个命令需要的文件)。
如果我们不加目标体,直接调用make,它会自动地执行第一个目标体,在这个例子里就是hello.o;要想让它执行第二个目标体,可以用“make+目标体”,在这个例子里就是make hello。

如果我们对上面那个makefile做出如下修改(调换第一和第二个目标体的位置)

hello:hello.o
        gcc hello.o -o hello
hello.o:hello.c
        gcc -c hello.c -o hello.o

我们会发现,调用make命令后仍然可以正常执行。
要想完成hello就必须依赖hello.o,根据make的“隐式规则”,执行hello时会自动的生成它的依赖文件hello.o,并且在使用该文件后不会将其删除,在当前目录下使用“ls”命令还可以查看到“hello.o”。

如果我们只想执行某个 *** 作而不生成文件可以使用“伪目标”。
例如

clean:
	rm *.o temp

'rm’命令将在每次你说’make clean’时被执行,但是它永远不会创建一个名为’clean’的文件。

要想了解更多make的使用规则和用法,可以点击链接阅读
GNU_make

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/718049.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存