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

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

  • 修改configure.scan并改名为configure.ac,之后打开,在终端输入如下:

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,不过系统弹出的内容会相当多。需要留意是不是真的成功了。(成功了会有以下完整的弹出内容)
linux下使用autotools自动生成Makefile文件_第1张图片

  • 生成Makefile文件

这时,在终端输入,./configure 指令,即生成对应的Makefile文件。(成功了会有以下完整的弹出内容)
linux下使用autotools自动生成Makefile文件_第2张图片

  • 最后,运行可执行文件即可。(文件名,是Makefile.am的bin_PROGRAMS后面的文件名)

你可能感兴趣的:(linux的编程)