linux下使用autotools自动生成Makefile文件

2019-07-13 04:52发布

linux下使用autotools自动生成Makefile文件

自己最近开始照着北航出版社的《嵌入式linux操作系统原理与应用》学linux,到了自动生成Makefile文件这里,实操发现教材有点错,查找资料后解决问题,简单地记录一下吧。 linux下对于多个.c文件的管理和编译一般使用Makefile工具。除了自己纯写入Makefile文件外,还可以通过autotools工具,只需要简单地输入一些文件名,和一些命令,就可以自动创建一个Makefile文件。 开发环境:
ubuntu16.0.4
  • 自动扫描
在对应的c文件所在目录自动扫描后,系统会自己添加,autoscan.log和configure.scan两个文件。如果提示没有scan工具的话,通过apt-get下载,终端命令为:
sudo apt-get autoscan mv ./configure.scan ./configure.ac
gedit ./configure.ac(这是第二条指令)
进入gedit界面后,configure.ac代码如下: # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.69]) AC_INIT(add_test, 1.0) AM_INIT_AUTOMAKE(add_test,1.0) AC_CONFIG_SRCDIR([main.c]) AC_CONFIG_HEADERS([config.h]) # Checks for programs. AC_PROG_CC # Checks for libraries. # Checks for header files. # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. AC_OUTPUT(Makefile) 这里有几点要注意/说明的:
AC_INIT()括号里有三个参数:程序的名字、版本和错误报告地址。这里我的错误报告地址不加。
AM_INIT_AUTOMAKE(add_test,1.0)整一行是自己输入的,参数为程序名和版本号。
AC_CONFIG_SRCDIR([main.c])里的参数,是main函数所在的.c文件,注意,是main函数所在的文件。
最后一句,AC_OUTPUT(Makefile),参数是输出的Makefile文件的命名,写其他名字都行(但是这名字,后面也会用到,不要随便写)。
  • 创建Makefile.am文件
注:文件名不一定是Makefile,它就是configure.ac的最后一句AC_OUTPUT(文件名),自己命名的参数。之前我一直命名为Makefile,不做改动。终端命令如下:
gedit Makefile.am
打开gedit Makefile.am后,代码如下: AUTOMAKE_OPTIONS = foreign bin_PROGRAMS = add_test add_test_SOURCES = main.c add.c main.h 同样说明的是:
AUTOMAKE_OPTIONS用来设置automake的软件等级,有foreign、gnu和gnits。foreign表示只检测必要的文件。
bin_PROGRAMS用来指定生成必要的可执行文件的名称,当有多个文件时,用空格隔开。
add_test_SOURCES 用来指定依赖文件,这里就不再是单单有main函数的那个文件了,是所有的.c文件(头文件可不需要)。
  • 生成configure文件
现在是要在终端上输入命令 autoreconf -fvi,不过系统弹出的内容会相当多。需要留意是不是真的成功了。(成功了会有以下完整的弹出内容)
在这里插入图片描述
  • 生成Makefile文件
这时,在终端输入,./configure 指令,即生成对应的Makefile文件。(成功了会有以下完整的弹出内容)
在这里插入图片描述
  • 最后,运行可执行文件即可。(文件名,是Makefile.am的bin_PROGRAMS后面的文件名)