Makefile文件的简单理解

         在大二的时候接触过Makefile,不过那时候没有把它当回事,想着现在不是有辣么多的IDE啦,学这个不是自找苦吃,所以就简单的看一下,敷衍了事,现在大三在老师的带领下系统的学习Linux后,发现当年好傻,接触的挺早的但是跟初学者一个样,哎呀,心好疼!!!下面我带大家深入的了解一下Gun Make及其基本用法。

        首先我们先讲一下关于make 的理论知识,然后通过一个小例子实际操作一下。

        在Linux中采用GUN  make这一体系,属于GUN计划中的一部分,可以说是所有体系中功能最为丰富、兼容性最好的一个Makefile文化的传承品,linux内核编译时有两个强依赖,其中一个是GUN  make,另一个是gcc。正所谓工欲善其事必先利其器,在我们学习Makefile之前首先我们了解一下make的基本用法。make就是linux系统下的一个工具,在任意目录中执行都可以,只是效果不同罢了。make会再执行路径中搜索Makefile文件,但是Makefile不是唯一的搜索对象,还可以是makefile或者GUNmakefile,如果一个路径中有他们三个的话,Make会选择其中一个,不过不要但心,make只会选择其中一个不会三个都选,那样不是会乱性了么,make的选择顺序是GUNmakefile,makefile,Makefile,只要选择其中一个,剩下的就不会理他了,现在觉得make是不是很专一了呢。当然如果你使用make -f +指定文件名称的话make就不是那么专一了呢

make的常用命令:

'make all'  其功能是编译所有目标,类似于make

‘make install’  安装程序

'make uninstall' 卸载安装的程序

‘make check’ 检查编译出来的东西能不能用

‘make dist’    把程序打包发布出去,一般是.tar.gz包

GUN提供了一系列的工具用于帮助开发人员收集系统配置信息并自动生成Makefile文件。这套工具包括GUN autoconf和GUN automake

GUN autoconf :

'autoconf ' 通过configure.ac文件生成configure可执行文件

'autoheader' 通过configure.ac文件生成config.h.in文件

‘autoscan’ 检查目录中的资源文件,并且生成configure.scan文件

'autoreconf '执行autoconf中的所有指令,即当你把congure.ac文件和Makefile.am文件全部写好后只要执行最高目录下执行这个命令即可

接下来我通过一个小的题目演示一下整个流程:

有一个工程的最高层目录test中有一个hello.c文件和include子目录。在include目录中有一个print.h文件,另一个print.c文件。

print.c文件:


print.h文件:


hello.c文件:


首先要在test目录下编写Makefile.am文件

SUBDIRS依赖文件夹的名称

bin_PROGRAMS生成可执行文件的名称

hello_SOURCE 依赖的文件名

hello.LDADD相当于c语言中include进来的库文件

接下来是在include目录下编写Makefile.am文件:

noinst_LIBRARIES生成一个临时的依赖文件供编译使用

libprint_a_SOURCES生成libprint.a文件所需要的文件,其中libprint_a中的_是Makefile的规则凡是非字符的统统用_代替

编写好这些文件后可以按着下面步骤执行了,在最高目录test下一次执行

1、autoscan,生成文件中有一个configure.scan文件,使用vim编辑并修改文件名为configure.ac,编好后内容如下:

2、在test目录下执行autoreconf,就把autoconf的所有命令全部执行完了。

3、这时候目录下已经生成了configure可执行文件,通过./confgure即可生成makefile文件

4、在test目录下执行automake,这时候目录下已经生成了所有的文件。打开Makefile文件发现里面有将近300行的代码,简直了都,一个print语句竟然有三百行的编译顺序代码,但是如果要自己写的话只要十几行而已,所以对于小项目来说掌握Makefile文件的编写,自己写非常简单的。

5、在test目录下执行make   &&  make install目录下即可生成hello可执行文件。到此整个小作业即可完成,主要还是Makefile.am和confgure.ac(confgure.scan)的编写,也即是能否正常生成Makefile文件的关键


博主试着把print.c文件放在test下的另一个目录lib中但是一直编译失败,无法生成可执行文件,一直没有解决,希望大家不吝赐教谢谢哈!!!




n 有一个简单的工程,其目录和文件结构如下所述:工程的最高层目录 test 中有一个 hello.c 文件和 lib include 两个子目录。在 lib 目录中有一个 print.c 文件,在 include 目录中有一个 print.h 文件。

n Gnu 提供了一系列的工具用于帮助开发人员收集系统配置信息并自动生成 Makefile 文件。这套工具包括:

n Gnu 提供了一系列的工具用于帮助开发人员收集系统配置信息并自动生成 Makefile 文件。这套工具包括:

n Gnu 提供了一系列的工具用于帮助开发人员收集系统配置信息并自动生成 Makefile 文件。这套工具包括:

n Gnu 提供了一系列的工具用于帮助开发人员收集系统配置信息并自动生成 Makefile 文件。这套工具包括:
n Gnu 提供了一系列的工具用于帮助开发人员收集系统配置信息并自动生成 Makefile 文件。这套工具

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值