怎样自动生成makefile.docx
- 文档编号:29945726
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:9
- 大小:17.97KB
怎样自动生成makefile.docx
《怎样自动生成makefile.docx》由会员分享,可在线阅读,更多相关《怎样自动生成makefile.docx(9页珍藏版)》请在冰豆网上搜索。
怎样自动生成makefile
怎样自动生成makefile
由于毕业设计开发的平台是Linux,为了在Linux进行,Makefile的编写是必不可少的,为偷懒,我想使用autotools来进行Makefile的自动生成,在阅读大量的资料后,在理解的基础之上,做了一个小实验,过程记录得非常详细!
我的平台是:
HP6510BNotebook
Fedora832位的
Autotools工具的版本均为Fedora8完全自带的,尚未进行过升级!
为了编译一个简单的源文件main.c,需要自动生成一个makefile,以下是步骤:
第一步:
----------
在/root/project/main目录下创建一个文件main.c,其内容如下:
------------------------------------------------
#include
intmain(intargc,char**argv)
{
printf("Hello,AutoMakefile!
\n");
return0;
}
------------------------------------------------
此时状态如下:
[root@localhostmain]#pwd
/root/project/main
[root@localhostmain]#ls
main.c
[root@localhostmain]#
第二步:
----------
运行autoscan,自动创建两个文件:
autoscan.logconfigure.scan
此时状态如下:
[root@localhostmain]#autoscan
[root@localhostmain]#ls
autoscan.logconfigure.scanmain.c
[root@localhostmain]#
第三步:
----------
修改configure.scan的文件名为configure.in
查看configure.in的内容:
------------------------------------------------
# -*-Autoconf-*-
#Processthisfilewithautoconftoproduceaconfigurescript.
AC_PREREQ(2.61)
AC_INIT(FULL-PACKAGE-NAME,VERSION,BUG-REPORT-ADDRESS)
AC_CONFIG_SRCDIR([main.c])
AC_CONFIG_HEADER([config.h])
#Checksforprograms.
AC_PROG_CC
#Checksforlibraries.
#Checksforheaderfiles.
#Checksfortypedefs,structures,andcompilercharacteristics.
#Checksforlibraryfunctions.
AC_OUTPUT
------------------------------------------------
解读以上的文件:
------------------------------------------------
# -*-Autoconf-*-
#Processthisfilewithautoconftoproduceaconfigurescript.
#AC_PREREQ:
#确保使用的是足够新的Autoconf版本。
如果用于创建configure的Autoconf的版
#本比version要早,就在标准错误输出打印一条错误消息并不会创建configure。
AC_PREREQ(2.61)
#
#初始化,定义软件的基本信息,包括设置包的全称,版本号以及报告BUG时需要用的邮箱地址
#
AC_INIT(FULL-PACKAGE-NAME,VERSION,BUG-REPORT-ADDRESS)
#
#用来侦测所指定的源码文件是否存在,来确定源码目录的有效性
#
AC_CONFIG_SRCDIR([main.c])
#
#用于生成config.h文件,以便autoheader使用
#
AC_CONFIG_HEADER([config.h])
#Checksforprograms.
AC_PROG_CC
#Checksforlibraries.
#Checksforheaderfiles.
#Checksfortypedefs,structures,andcompilercharacteristics.
#Checksforlibraryfunctions.
#
#创建输出文件。
在`configure.in'的末尾调用本宏一次。
#
AC_OUTPUT
------------------------------------------------
修改动作:
1.修改AC_INIT里面的参数:
AC_INIT(main,1.0,pgpxc@)
2.添加宏AM_INIT_AUTOMAKE,它是automake所必备的宏,也同前面一样,PACKAGE是所要产生软件套件的名称,VERSION是版本编号。
3.在AC_OUTPUT后添加输出文件Makefile
修改后的结果:
------------------------------------------------
# -*-Autoconf-*-
#Processthisfilewithautoconftoproduceaconfigurescript.
AC_PREREQ(2.61)
AC_INIT(main,1.0,pgpxc@)
AC_CONFIG_SRCDIR([main.c])
AC_CONFIG_HEADER([config.h])
AM_INIT_AUTOMAKE(main,1.0)
#Checksforprograms.
AC_PROG_CC
#Checksforlibraries.
#Checksforheaderfiles.
#Checksfortypedefs,structures,andcompilercharacteristics.
#Checksforlibraryfunctions.
AC_OUTPUT([Makefile])
------------------------------------------------
第四步:
运行aclocal,生成一个“aclocal.m4”文件和一个缓冲文件夹autom4te.cache,该文件主要处理本地的宏定义。
此时的状态是:
[root@localhostmain]#aclocal
[root@localhostmain]#ls
aclocal.m4autom4te.cacheautoscan.logconfigure.inconfigure.in~main.c
[root@localhostmain]#
第五步:
运行autoconf,目的是生成configure
此时的状态是:
[root@localhostmain]#autoconf
[root@localhostmain]#ls
aclocal.m4 autoscan.logconfigure.in main.c
autom4te.cacheconfigure configure.in~
[root@localhostmain]#
第六步:
运行autoheader,它负责生成config.h.in文件。
该工具通常会从“acconfig.h”文件中复制用户附加的符号定义,因此此处没有附加符号定义,所以不需要创建“acconfig.h”文件。
此时的状态是:
[root@localhostmain]#autoheader
[root@localhostmain]#ls
aclocal.m4 autoscan.logconfigure configure.in~
autom4te.cacheconfig.h.in configure.inmain.c
[root@localhostmain]#
第七步:
下面即将运行automake,但在此之前应该做一下准备工作!
首先
创建一个Makefile.am.这一步是创建Makefile很重要的一步,automake要用的脚本配置文件是Makefile.am,用户需要自己创建相应的文件。
之后,automake工具转换成Makefile.in。
这个Makefile.am的内容如下:
------------------------------------------------
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=main
main_SOURCES=main.c
------------------------------------------------
下面对该脚本文件的对应项进行解释。
其中的AUTOMAKE_OPTIONS为设置automake的选项。
由于GNU(在第1章中已经有所介绍)对自己发布的软件有严格的规范,比如必须附带许可证声明文件COPYING等,否则automake执行时会报错。
automake提供了三种软件等级:
foreign、gnu和gnits,让用户选择采用,默认等级为gnu。
在本例使用foreign等级,它只检测必须的文件。
bin_PROGRAMS定义要产生的执行文件名。
如果要产生多个执行文件,每个文件名用空格隔开。
main_SOURCES定义“main”这个执行程序所需要的原始文件。
如果”main”这个程序是由多个原始文件所产生的,则必须把它所用到的所有原始文件都列出来,并用空格隔开。
例如:
若目标体“main”需要“main.c”、“sunq.c”、“main.h”三个依赖文件,则定义main_SOURCES=main.csunq.cmain.h。
要注意的是,如果要定义多个执行文件,则对每个执行程序都要定义相应的file_SOURCES。
其次
使用automake对其生成“configure.in”文件,在这里使用选项“—adding-missing”可以让automake自动添加有一些必需的脚本文件。
运行后的状态是:
------------------------------------------------
[root@localhostmain]#automake--add-missing
configure.in:
8:
installing`./missing'
configure.in:
8:
installing`./install-sh'
Makefile.am:
installing`./depcomp'
[root@localhostmain]#ls
aclocal.m4 config.h.in configure.in~main.c Makefile.in
autom4te.cacheconfigure depcomp Makefile.ammissing
autoscan.log configure.ininstall-sh Makefile.am~
[root@localhostmain]#
------------------------------------------------
第八步
运行configure,在这一步中,通过运行自动配置设置文件configure,把Makefile.in变成了最终的Makefile。
运行的结果如下:
------------------------------------------------
[root@localhostmain]#./configure
checkingforaBSD-compatibleinstall.../usr/bin/install-c
checkingwhetherbuildenvironmentissane...yes
checkingforathread-safemkdir-p.../bin/mkdir-p
checkingforgawk...gawk
checkingwhethermakesets$(MAKE)...yes
checkingforgcc...gcc
checkingforCcompilerdefaultoutputfilename...a.out
checkingwhethertheCcompilerworks...yes
checkingwhetherwearecrosscompiling...no
checkingforsuffixofexecutables...
checkingforsuffixofobjectfiles...o
checkingwhetherweareusingtheGNUCcompiler...yes
checkingwhethergccaccepts-g...yes
checkingforgccoptiontoacceptISOC89...noneneeded
checkingforstyleofincludeusedbymake...GNU
checkingdependencystyleofgcc...gcc3
configure:
creating./config.status
config.status:
creatingMakefile
config.status:
creatingconfig.h
config.status:
executingdepfilescommands
[root@localhostmain]#ls
aclocal.m4 config.h.in configure.in main.c Makefile.in
autom4te.cacheconfig.log configure.in~Makefile missing
autoscan.log config.statusdepcomp Makefile.am stamp-h1
config.h configure install-sh Makefile.am~
[root@localhostmain]#
------------------------------------------------
第九步
运行make,对配置文件Makefile进行测试一下
此时的状态如下:
------------------------------------------------
[root@localhostmain]#make
cd.&&/bin/sh/root/project/main/missing--runaclocal-1.10
cd.&&/bin/sh/root/project/main/missing--runautomake-1.10--foreign
cd.&&/bin/sh/root/project/main/missing--runautoconf
/bin/sh./config.status--recheck
runningCONFIG_SHELL=/bin/sh/bin/sh./configure --no-create--no-recursion
checkingforaBSD-compatibleinstall.../usr/bin/install-c
checkingwhetherbuildenvironmentissane...yes
checkingforathread-safemkdir-p.../bin/mkdir-p
checkingforgawk...gawk
checkingwhethermakesets$(MAKE)...yes
checkingforgcc...gcc
checkingforCcompilerdefaultoutputfilename...a.out
checkingwhethertheCcompilerworks...yes
checkingwhetherwearecrosscompiling...no
checkingforsuffixofexecutables...
checkingforsuffixofobjectfiles...o
checkingwhetherweareusingtheGNUCcompiler...yes
checkingwhethergccaccepts-g...yes
checkingforgccoptiontoacceptISOC89...noneneeded
checkingforstyleofincludeusedbymake...GNU
checkingdependencystyleofgcc...gcc3
configure:
creating./config.status
/bin/sh./config.status
config.status:
creatingMakefile
config.status:
creatingconfig.h
config.status:
config.hisunchanged
config.status:
executingdepfilescommands
cd.&&/bin/sh/root/project/main/missing--runautoheader
rm-fstamp-h1
touchconfig.h.in
makeall-am
make[1]:
Enteringdirectory`/root/project/main'
gcc-DHAVE_CONFIG_H-I. -g-O2-MTmain.o-MD-MP-MF.deps/main.Tpo-c-omain.omain.c
mv-f.deps/main.Tpo.deps/main.Po
gcc-g-O2 -omainmain.o
cd.&&/bin/sh./config.statusconfig.h
config.status:
creatingconfig.h
config.status:
config.hisunchanged
make[1]:
Leavingdirectory`/root/project/main'
[root@localhostmain]#ls
aclocal.m4 autoscan.logconfig.h.inconfig.statusconfigure.in depcomp main main.o Makefile.am Makefile.instamp-h1
autom4te.cacheconfig.h config.log configure configure.in~install-shmain.cMakefileMakefile.am~missing
[root@localhostmain]#
------------------------------------------------
第十步
运行生成的文件main:
------------------------------------------------
[root@localhostmain]#./main
Hello,AutoMakefile!
[root@localhostmain]#
------------------------------------------------
我用的是ubuntu
以上就是全文了.但有一处要改:
用aclocal
全报有一个m4文件有错.找到报错的那一行.把变量加个中括号就可以了.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 怎样 自动 生成 makefile