图片-小白之家
图片-小白之家
图片-小白之家
图片-小白之家

linux makefile(linux makefile怎么用)

在Linux操作体系下进行开发,编写Makefile似乎是不可缺少的事情。但是关于一个比较大的工程,编写一个符合规范的Makefile并非易事。并且由于Makefile的各种显式,隐式规则,加之平时并不经常编写Makefile,导致咱们写一个Makefile文件变得更加困难了。

幸好Linux社区有一群十分懒,又十分勤勉得程序员,他们开发了一个能够主动生成Makefile文件得东西,这就是autotools。该东西能够经过扫描源文件,主动生成一个Makefile文件。是不是很神奇!下面是生成Makefile的一个全体流程,咱们后边渐渐介绍。

装置autotools

有的体系或许并没有autotools东西,需求手动装置,以Ubuntu为例,能够经过如下指令进行装置:

sudoaptinstallautomake

完结装置之后就能够运用autotools进行下面的流程了。

生成configure.ac文件

首要咱们要预备一些源文件,如下图是本文预备的源文件。本文以C++言语开发的程序为例,其间main.cpp是主程序地点文件,而async_network*和storage*分别是网络通信模块和本地存储模块,分别封装了一个C++类来完成详细的功能。本文经过多个文件是为了增加项目的复杂性。源文件的详细内容本文不再赘述,由于这个与内容无关。

完结对源文件创立后,咱们就能够经过autoscan指令对该目录进行扫描,生成configure.scan文件。首要切换到该目录,然后履行指令,详细如下:

autoscan

履行成功后能够看出多了两个文件,一个是autoscan.log,这个是日志文件;别的一个是configure.scan文件,这个是扫描的成果文件。

这里configure.scan其实是一个模板文件,咱们需求手动修正一下其内容,并将其改名为configure.ac。详细需求做:

1)AC_INIT里面的参数:AC_INIT(main,1.0,sunnyzhangAT126.com);

2)增加宏AM_INIT_AUTOMAKE;

3)在AC_OUTPUT后增加输出文件Makefile。

完结修正后的文件内容如下:

生成aclocal.m4文件

直接履行aclocal指令即可生成该文件:

aclocal

aclocal.m4是一个宏界说文件,该文件内容的生成依赖于configure.ac文件。aclocal会依据confgure.ac文件的内容,搜索本地的m4文件(通常在类似目录下面/usr/share/aclocal-1.15/),然后生成一个在本目录下面运用的aclocal.m4文件。

生成config.h.in文件

该文件的生成比较简单,直接在指令行履行如下指令即可:

autoheader

这个文件是一个模板文件,后边会使用该文件生成config.h文件。该文件包括一些宏界说。

生成Makefile.in文件

生成Makefile.in文件之前需求首要手动的创立一个Makefile.am文件,该文件用于描述源文件与方针文件的联系。本文对应的Makefile.am文件如下所示:

能够看出该文件十分简单,这比写一个Makefile要简单的多。

如果要生成多个方针文件,需求在这里写多个源文件与方针文件的对应联系。这种状况是十分常见的,比方一些复杂的项目中通常会包括主程序,测试程序,动态库等等。

生成configure文件

上述文件都生成后就能够生成configure文件了。该文件是用于生成Makefile的一个脚本。咱们在很多开源项目中肯定都遇到过。在开源项目中通常都有一个生成好的configure文件,咱们只需求履行该文件就能够生成Makefile。

生成configure文件的办法很简单,咱们履行如下指令即可:

autoconf

至此咱们完结了生成Makefile的所有预备工作,然后咱们在该目录下面运行configure脚本,即可生成Makefile文件。

./configure

能够看出,在整个过程中咱们只需求手动修正或许创立2个文件,并且修正的内容很少。最后咱们就能够得到一个完整的Makefile文件。关于大型的软件项目,这种办法无疑是十分有效的。
图片[1]-linux makefile(linux makefile怎么用)-小白之家,linuxmakefile怎么用,1、Makefile的规矩

makefile的结构是由规矩构成的。make指令履行时先在Makefile文件中查找各种规矩,对各种规矩进行解析后,运行规矩。规矩的根本格式为:

TARGET…:DEPENDS…

COMMAND

……

TARGET:规矩所界说的方针。一般规矩是最终生成的可履行文件的文件名或者是为了生成可履行文件而依靠的方针文件的文件名,也可所以一个动作,称之为“伪方针”;

DEPENDS:履行此规矩一切必要的依靠条件,例如生成可履行文件的方针文件,DEPENDS也可所以某个TARGET,这样就形成了TARGET之间的嵌套;

COMMAND:规矩所履行的指令,即规矩的动作。COMMAND指令有必要以Tab键开头,不能够运用空格键替代。

2、Makefile变量

1.用户自界说变量

运用Makefile进行规矩界说时,用户能够界说自己的变量,称为用户自界说变量。例如:

CC=gcc

CFLAGS=–Isub–Iadd

TARGET=cacu

RM=rm–f

2.Makefile中自动变量

$^:代表一切的依靠文件

$@:代表方针

$<:代表第一个依靠文件

3、其它

Makefile中运用“#”注释

MakeFile中能够在指令码前加上“@”,取消指令回显。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容

图片-小白之家
图片-小白之家