微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 自动生成 Makefile 的全过程详解

自动生成 Makefile 的全过程详解

时间:10-10 来源:互联网 点击:

系统特性、环境变量、软件必须的参数的shell 脚本。

autoconf 是用来生成自动配置软件源代码脚本(configure )的工具。configure 脚本能独立于autoconf 运行,且在运行的过程中,不需要用户的干预。

要生成configure 文件,你必须告诉autoconf 如何找到你所用的宏。方式是使用aclocal 程序来生成你的aclocal.m4。

aclocal 根据configure.in 文件的内容,自动生成aclocal.m4 文件。aclocal 是一个perl 脚本程序,它的定义是:“aclocal - create aclocal.m4 by scanning configure.ac” 。

autoconf 从configure.in 这个列举编译软件时所需要各种参数的模板文件中创建configure 。

autoconf 需要GNU m4 宏处理器来处理aclocal.m4 ,生成configure 脚本。

m4 是一个宏处理器。将输入拷贝到输出,同时将宏展开。宏可以是内嵌的,也可以是用户定义的。除了可以展开宏,m4 还有一些内建的函数,用来引用文件,执行命令,整数运算,文本操作,循环等。m4 既可以作为编译器的前端,也可以单独作为一个宏处理器。

4 、新建Makefile.am

新建Makefile.am 文件,命令:

$ vi Makefile.am

内容如下:

AUTOMAKE_OPTIONS=foreign

bin_PROGRAMS=helloworld

helloworld_SOURCES=helloworld.c

automake 会根据你写的Makefile.am 来自动生成Makefile.in 。

Makefile.am 中定义的宏和目标, 会指导automake 生成指定的代码。例如,宏bin_PROGRAMS 将导致编译和连接的目标被生成。

5 、运行automake

命令:

$ automake --add-missing

configure.in: installing `./install-sh'

configure.in: installing `./mkinstalldirs'

configure.in: installing `./missing'

Makefile.am: installing `./depcomp'

automake 会根据Makefile.am 文件产生一些文件,包含最重要的Makefile.in 。

6 、执行configure 生成Makefile

$ ./configure

checking for a BSD-compatible install... /usr/bin/install -c

checking whether build environment is sane... yes

checking for gawk... gawk

checking whether make sets $(MAKE)... yes

checking for gcc... gcc

checking for C compiler default output... a.out

checking whether the C compiler works... yes

checking whether we are cross compiling... no

checking for suffix of executables...

checking for suffix of object files... o

checking whether we are using the GNU C compiler... yes

checking whether gcc accepts -g... yes

checking for gcc option to accept ANSI C... none needed

checking for style of include used by make... GNU

checking dependency style of gcc... gcc3

configure: creating ./config.status

config.status: creating Makefile

config.status: executing depfiles commands

$ ls -l Makefile

-rw-rw-r-- 1 yutao yutao 15035 Oct 15 10:40 Makefile

你可以看到,此时Makefile 已经产生出来了。

7 、使用Makefile 编译代码

$ make

if gcc -DPACKAGE_NAME= -DPACKAGE_TARNAME= -DPACKAGE_VERSION= -

DPACKAGE_STRING= -DPACKAGE_BUGREPORT= -DPACKAGE=helloworld -DVERSION=1.0

-I. -I. -g -O2 -MT helloworld.o -MD -MP -MF .deps/helloworld.Tpo \

-c -o helloworld.o `test -f 'helloworld.c' || echo './'`helloworld.c; \

then mv -f .deps/helloworld.Tpo .deps/helloworld.Po; \

else rm -f .deps/helloworld.Tpo; exit 1; \

fi

gcc -g -O2 -o helloworld helloworld.o

运行helloworld

$ ./helloworld

Hello, Linux World!

这样helloworld 就编译出来了,你如果按上面的步骤来做的话,应该也会很容易地编译出正确的helloworld 文件。你还可以试着使用一些其 他的make 命令,如make clean ,make install ,make dist ,看看它们会给你什么样的效果。感觉如何?自己也能写出这么专业的Makefile ,老板一定会对你刮目相看。

四、深入浅出

针对上面提到的各个命令,我们再做些详细的介绍。

1 、 autoscan

autoscan 是用来扫描源代码目录生成configure.scan 文件的。autoscan 可以用目录名做为参数,但如果你不使用参数的话,那么 autoscan 将认为使用的是当前目录。autoscan 将扫描你所指定目录中的源文件,并创建configure.scan 文件。

2 、 configure.scan

configure.scan 包含了系统配置的基本选项,里面都是一些宏定义。我们需要将它改名为configure.in

3 、 aclocal

aclocal 是一个perl 脚本程序。aclocal 根据configure.in 文件的内容,自动生成aclocal.m4

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top