Make与Makefile基础 | 一

目录

一、Make是什么

二、Make有什么作用

三、Make怎么起作用的

四、Make的优势

五、Make读入的文件命名规范

六、Make如何读取Makefile

七、Makefile基本结构

八、Make执行Makefile中的clean


makefile是什么,有什么作用

来自CSND创作助手的回复:

makefile是一种用来描述项目中代码文件之间依赖关系和编译顺序的文件。它是用于构建/编译软件的自动化工具的配置文件。makefile告诉编译器如何编译和链接代码,使得代码能够顺利地被构建成可执行文件。

makefile的主要作用包括:

  1. 确保源代码被正确编译,以生成可执行文件。

  2. 自动化程序编译和构建的过程,从而减少手动操作的人为错误。

  3. 检查源代码文件的依赖关系,只有在必要的情况下才重新编译文件。

  4. 确保所有文件都按正确的顺序编译,以避免编译错误。

  5. 可以方便地修改代码,任意更改任何一个源文件后,makefile就可以自动地更新其中的依赖关系,只重新编译必要的文件。

总之,makefile是用于自动化软件构建的重要工具,能够显著提高软件开发效率,降低错误率,使得软件开发过程更加高效、稳定和可靠。

一、Make是什么

在了解make是什么之前需要了解GNU工具:

1)编译工具:把一个源程序编译为一个可执行程序;

2)调试工具:能对执行程序进行源码或汇编级调试;

3)软件工程工具:用于协助多人开发或大型软件项目的管理,如make,CVS,Subvision;

4)make:又称为工程管理器,也就是自动编译管理器;

5)其他工具:用于把多个目标文件链接成可执行文件的链接器,或者用作格式转换的工具。

二、Make有什么作用

        Make功能:自动编译管理器指-它能够根据文件时间戳自动发现,更新过的文件而减少编译的工作量。

三、Make怎么起作用的

        通过读入Makefile文件的内容执行大量的编译工作。

四、Make的优势

        当我们在keil 5,ARM等编译器修改一段代码,我们需要编译整个工程文件,进而测试修改的代码部分有没有生效。假设代码量很大,编译需要较长时间,每次轻微的改动都需要编译整个工程,那么就会有消耗时间。

        当我们在Linux系统中编译文件,一般而言是使用gcc进行生成,当工程文件数量较多时,需要执行多条指令进行编译,比较麻烦,也很费时间。但我们使用make读取Makefile文件,编译器只编译改动的代码文件,而不用完整编译全部文件,效率会高很多。使用了Make读取Makefile文件后,规定好了生成文件,一步到位,快捷省事。

        关键优势:编译器只编译改动的代码文件,而不用完整编译全部文件。

五、Make读入的文件命名规范

        一般而言,就是与.c文件相同路径下,命名为:Makefile(首字母小写也可以)。

六、Make如何读取Makefile

        当前路径下,存在名称为Makefile(名称为makefile也可以)文件的文件,直接在命令行输入make即可读取。

        也可以添加相对路径,或绝对路径进行Makefile文件的读取。

七、Makefile基本结构

Makefile格式:
target :dependency_files
<TAB> command


例子,创建了一个文件名为Makefile,内容如下(和 hello.c hello.h文件在同一路径下):
hello.o: hello.c hello.h
  gcc -c hello.c -0 hello.o

(命令含义:-c 只编译不链接,生成目标文件.o文件,-o 把.o文件输出到那个文件中)

Makefile格式解析

1)target:最终生成的可执行文件名称(生成什么)

2)dependency_files:由那个或那几个文件生成的(由谁生成)

3)<TAB>:在输入命令前需要有一个Tab键的距离(格式规范)

例子解析

1)hello.o:最终生成的文件名称是hello.o(生成什么)

2)hello.c hello.h(由谁生成)

3) gcc -C hello.c -0 hello.o(<TAB> command)

4)这里的生成文件名称是自己定义的(这里的是hello.o),不必和由谁生成的文件名一致(这里是的hello.c hello.h),否则会导致混乱,特此说明

八、Make执行Makefile中的clean

Makefile文件内容为:

test:f1.o f2.o main.o
  gcc f1.o f2.o main.o -o test
f1.o:f1.c
  gcc -c f1.c -0 f1.o
f2.o:f2.c
  gcc -c f2.c -o f2.o
main.o:main.c
  gcc -c main.c -0 main.o
clean:
  rm *.o test

以上Makefile文件的作用是:生成把生成的内容输出到:test文件中,并清除编译过程产生的中间文件.o文件

1)在命令行输入:make clean即可实现删除.o文件的功能

2)当前路径下出现了一个名称为:clean的目录时,make clean目录会出现报错

解决办法:

在Makefile文件中加入内容-.PHONY:clean即可,完整文件内容如下:

test:f1.o f2.o main.o
  gcc f1.o f2.o main.o -o test
f1.o:f1.c
  gcc -c f1.c -0 f1.o
f2.o:f2.c
  gcc -c f2.c -o f2.o
main.o:main.c
  gcc -c main.c -0 main.o

.PHONY:clean

clean:
  rm *.o test

这时在执行make clean就可以正常清理.o文件了。

先到这吧,下次在记。

猜你喜欢

转载自blog.csdn.net/qq_57663276/article/details/131662920