游戏玩法当前位置:奇亿娱乐 > 游戏玩法 > >

GCC编译步骤+Gdb调试器+Make工程管理器

  在上一末节,读者已经相识到了make项目治理器的强盛功效。简直,Makefile可以资助make完成它的任务,但要认可的是,编写Makefile确实不是一件轻松的事,尤其对付一个较大的项目而言更是云云。那么,有没有一种轻松的本领天生Makefile而同时又能让用户享受make的良好性呢?本节要讲的autotools系列东西正是为此而设的,它只需用户输入简朴的目的文件、依靠文件、文件目次等就可以轻松地天生Makefile了,这无疑是宽大用户的所盼望的。别的,这些东西还可以完成体系设置信息的网络,从而可以方便地处置惩罚种种移植性的题目。也正是基于此,如今Linux上的软件开辟一样平常都用autotools来制作Makefile,读者在背面的报告中就会相识到。

  autotools利用流程

  正如前面所言,autotools是系列东西,读者起首要确认体系是否装了以下东西(可以用which下令举行检察)。

  · aclocal

  · autoscan

  · autoconf

  · autoheader

  · automake

  利用autotools重要就是使用各个东西的脚本文件以天生末了的Makefile。其总体流程是如许的:

  · 利用aclocal天生一个“aclocal.m4”文件,该文件重要处置惩罚当地的宏界说;

  · 改写“configure.scan”文件,并将其重定名为“configure.in”,并利用autoconf文件天生configure文件。

  接下来,笔者将通过一个简朴的hello.c例子领导读者认识autotools天生makefile的历程,由于在这历程中有涉及到较多的脚本文件,为了更清晰地相识相互之间的干系,猛烈发起读者现实动手操纵以领会其整个历程。

  1.autoscan

  它会在给定目次及其子目次树中查抄源文件,若没有给出目次,就在当前目次及其子目次树中举行查抄。它会搜刮源文件以探求一样平常的移植性题目并创建一个文件“configure.scan”,该文件就是接下来autoconf要用到的“configure.in”原型。如下所示:

  [root@localhost automake]#autoscan

  autom4te: configure.ac: no such file or directory

  autoscan: /usr/bin/autom4te failed with exit status: 1

  [root@localhost automake]# ls

  autoscan.logconfigure.scanhello.c

  如上所示,autoscan起首会实验去读入“configure.ac”(同configure.in的设置文件)文件,此时还没有创建该设置文件,于是它会主动天生一个“configure.in”的原型文件“configure.scan”。

  2.autoconf

  configure.in是autoconf的脚本设置文件,它的原型文件“configure.scan”如下所示:

  # -*- Autoconf -*-

  # Process this file with autoconf to produce a configure script.

  AC_PREREQ(2.59)

  #The next one is modified by sunq

  #AC_INIT(FULL-PACKAGE-NAME,VERSION,BUG-REPORT-ADDRESS)

  AC_INIT(hello,1.0)

  # The next one is added by sunq

  AM_INIT_AUTOMAKE(hello,1.0)

  AC_CONFIG_SRCDIR([hello.c])

  AC_CONFIG_HEADER([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_CONFIG_FILES([Makefile])

  AC_OUTPUT

  下面临这个脚本文件举行表明:

  · 以“#”号开始的举动解释。

  · AC_PREREQ宏声明本文件要求的autoconf版本,如本例利用的版本2.59。

  · AC_INIT宏用来界说软件的名称和版本等信息,在本例中省略了BUG-REPORT-ADDRESS,一样平常为作者的e-mail。

  · AM_INIT_AUTOMAKE是笔者另加的,它是automake所必备的宏,也同前面一样,PACKAGE是所要产生软件套件的名称,VERSION是版本编号。

  · AC_CONFIG_SRCDIR宏用来侦测所指定的源码文件是否存在,来确定源码目次的有

  上一篇:★北京易凯联讯科技有限责任公司2016校园招聘启事

  效性。在此处为当前目次下的hello.c。

  · AC_CONFIG_HEADER宏用于天生config.h文件,以便autoheader利用。

  · AC_CONFIG_FILES宏用于天生相应的Makefile文件。

  · 中心的解释间可以添加分别用户测试步伐、测试函数库、测试头文件等宏界说。

  接下来起首运行aclocal,天生一个“aclocal.m4”文件,该文件重要处置惩罚当地的宏界说。如下所示:

  [root@localhost automake]#aclocal

  再接着运行autoconf,天生“configure”可实行文件。如下所示:

  [root@localhost automake]#autoconf

  [root@localhost automake]#ls

  aclocal.m4 autom4te.cache autoscan.logconfigureconfigure.in hello.c

  3.autoheader

  接着利用autoheader下令,它卖力天生config.h.in文件。该东西通常会从“acconfig.h”文件中复制用户附加的标记界说,因此此处没有附加标记界说,以是不必要创建“acconfig.h”文件。如下所示:

  [root@localhost automake]#autoheader

  4.automake

  这一步是创建Makefile很紧张的一步,automake要用的脚本设置文件是Makefile.am,用户必要本身创建相应的文件。之后,automake东西转换成Makefile.in。在该例中,笔者创建的文件为Makefile.am如下所示:

  AUTOMAKE_OPTIONS=foreign

  bin_PROGRAMS=hello

  hello_SOURCES=hello.c

  下面临该脚本文件的对应项举行表明。

  · 此中的AUTOMAKE_OPTIONS为设置automake的选项。由于GNU(在第1章中已经有所先容)对本身公布的软件有严 的范例,好比必须附带允许证声明文件COPYING等,不然automake实行时会报错。automake提供了三种软件品级:foreign、gnu和gnits,让用户选择接纳,默认品级为gnu。在本例利用foreign品级,它只检测必须的文件。

  · bin_PROGRAMS界说要产生的实行文件名。假如要产生多个实行文件,每个文件名用空 离隔。

  · hello_SOURCES界说“hello”这个实行步伐所必要的原始文件。假如”hello”这个步伐是由多个原始文件所产生的,则必须把它所用到的全部原始文件都列出来,并用空 离隔。比方:若目的体“hello”必要“hello.c”、“sunq.c”、“hello.h”三个依靠文件,则界说hello_SOURCES=hello.c sunq.c hello.h。要留意的是,假如要界说多个实行文件,则对每个实行步伐都要界说相应的file_SOURCES。

  接下来可以利用automake对其天生“configure.in”文件,在这里利用选项“—adding-missing”可以让automake主动添加有一些必须的脚本文件。如下所示:

  [root@localhost automake]#automake --add-missing

  configure.in: installing 'http:///html/bbrj/2016/0709/install-sh'

  configure.in: installing 'http:///html/bbrj/2016/0709/missing'

  Makefile.am: installing 'depcomp'

  [root@localhost automake]#ls

  aclocal.m4 autoscan.logconfigure.inhello.c Makefile.am missing

  autom4te.cache configure depcomp install-sh Makefile.in config.h.in

  可以看到,在automake之后就可以天生configure.in文件。

  5.运行configure

  在这一步中,通过运行主动设置设置文件configure,把Makefile.in酿成了终极的Makefile。如下所示:

  [root@localhost automake]#http:///html/bbrj/2016/0709/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 file name... a.out

  checking whether the C compiler works... yes

  checking whether we are cross compiling... no

  checking for suffix of executables...

  上一篇:★北京易凯联讯科技有限责任公司2016校园招聘启事

  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 http:///html/bbrj/2016/0709/config.status

  config.status:creating Makefile

  config.status: executing depfiles commands

  可以看到,在运行configure时网络了体系的信息,用户可以在configure下令中对其举行方便地设置。在http:///html/bbrj/2016/0709/configure的自界说参数有两种,一种是开关式(--enable-XXX或--disable-XXX),另一种是开放式,即背面要填入一串字符(--with-XXX=yyyy)参数。读者可以自行实验其利用要领。别的,读者可以检察同一目次下的”config.log”文件,以方便调试之用。

  到此为止,makefile就可以主动天生了。回想整个步调,用户不再必要定制差别的规矩,而只必要输入简朴的文件及目次名即可,如许就大大方便了用户的利用。下面的图3.9总结了上述历程:

  图3.9 autotools天生Makefile流程图

  利用autotools所天生的Makefile

  autotools天生的Makefile除具有平凡的编译功效外,还具有以下重要功效(感爱好的读者可以检察这个简朴的hello.美娱国际c步伐的makefile):

  1.make

  键入make默认实行”make all”下令,即目的体为all,其实行环境如下所示:

  [root@localhost automake]#make

  if Gcc -DPACKAGE_NAME=-DPACKAGE_TARNAME=-DPACKAGE_VERSION=-DPACKAGE_STRING=-DPACKAGE_BUGREPORT=-DPACKAGE=hello -DVERSION=1.0 -I. -I. -g -O2 -MT hello.o -MD -MP -MF .deps/hello.Tpo -c -o hello.o hello.c;

  then mv -f .deps/hello.Tpo .deps/hello.Po else rm -f .deps/hello.Tpo exit 1; fi

  Gcc -g -O2 -o hello hello.o

  此时在本目次下就天生了可实行文件“hello”,运行“http:///html/bbrj/2016/0709/hello”能出现正常效果,如下所示:

  [root@localhost automake]#http:///html/bbrj/2016/0709/hello

  Hello!Autoconf!

  2.make install

  此时,会把该步伐安装到体系目次中去,如下所示:

  [root@localhost automake]#make install

  if Gcc -DPACKAGE_NAME=-DPACKAGE_TARNAME=-DPACKAGE_VERSION=-DPACKAGE_STRING=-DPACKAGE_BUGREPORT=-DPACKAGE=hello -DVERSION=1.0 -I. -I. -g -O2 -MT hello.o -MD -MP -MF .deps/hello.Tpo -c -o hello.o hello.c;

  then mv -f .deps/hello.Tpo .deps/hello.Po else rm -f .deps/hello.Tpo exit 1; fi

  Gcc -g -O2 -o hello hello.o

  make[1]: Entering directory '/root/workplace/automake'

  test -z /usr/local/bin || mkdir -p -- /usr/local/bin

  /usr/bin/install -c 'hello' '/usr/local/bin/hello'

  make[1]: Nothing to be done for 'install-data-am'.

  make[1]: LeaVing directory '/root/workplace/automake'

  此时,若直接运行hello,也能出现精确效果,如下所示:

  [root@localhost automake]#hello

  Hello!Autoconf!

  3.make clean

  此时,make会扫除之前所编译的可实行文件及目的文件(object file, *.o),如下所示:

  [root@localhost automake]#make clean

  test -z hello || rm -f hello

  rm -f *.o

  4.make dist

  此时,make将步伐和相干的文档打包为一个压缩文档以供公布,如下所示:

  [root@localhost automake]#make dist

  [root@localhost automake]# ls hello-1.0-tar.gz

  hello-1.0-tar.gz

  可见该下令天生了一个hello-1.0-tar.gz的压缩文件。

  由上面的报告读者不丢脸出,autotools确实是软件维护与公布的必备东西,也鉴于此,现在GUN的软件一样平常都是由automake来制作的。

  上一篇:★北京易凯联讯科技有限责任公司2016校园招聘启事

  作者:王媛媛  来源:本站  点击:163  发布时间:2016-07-10 00:04:22

(责任编辑:admin)

上一篇:张艺兴《老九门》演技爆发甜虐无缝翻转到精分

下一篇:龙芯机器人控制器首次亮相南京2016国际服务机器

推荐内容