Generate Makefile new version.

2.4 A Small Hello World

In this section we recreate the amhello-1.0 package fromscratch. The first subsection shows how to call the Autotools toinstantiate the GNU Build System, while the second explains themeaning of the configure.ac and Makefile.am files readby the Autotools.


2.4.1 Creating amhello-1.0.tar.gz

Here is how we can recreate amhello-1.0.tar.gz from scratch.The package is simple enough so that we will only need to write 5files. (You may copy them from the final amhello-1.0.tar.gzthat is distributed with Automake if you do not want to write them.)

Create the following files in an empty directory.

  • src/main.c is the source file for the hello program. Westore it in the src/ subdirectory, because later, when the packageevolves, it will ease the addition of a man/ directory for manpages, a data/ directory for data files, etc.
    ~/amhello % cat src/main.c
    #include <config.h>
    #include <stdio.h>
    
    int
    main (void)
    {
      puts ("Hello World!");
      puts ("This is " PACKAGE_STRING ".");
      return 0;
    }
    
  • README contains some very limited documentation for our littlepackage.
    ~/amhello % cat README
    This is a demonstration package for GNU Automake.
    Type 'info Automake' to read the Automake manual.
    
  • Makefile.am and src/Makefile.am contain Automakeinstructions for these two directories.
    ~/amhello % cat src/Makefile.am
    bin_PROGRAMS = hello
    hello_SOURCES = main.c
    ~/amhello % cat Makefile.am
    SUBDIRS = src
    dist_doc_DATA = README
    
  • Finally, configure.ac contains Autoconf instructions tocreate the configure script.
    ~/amhello % cat configure.ac
    AC_INIT([amhello], [1.0], [bug-automake@gnu.org])
    AM_INIT_AUTOMAKE([-Wall -Werror foreign])
    AC_PROG_CC
    AC_CONFIG_HEADERS([config.h])
    AC_CONFIG_FILES([
     Makefile
     src/Makefile
    ])
    AC_OUTPUT
    

Once you have these five files, it is time to run the Autotools toinstantiate the build system. Do this using the autoreconfcommand as follows:

~/amhello % autoreconf --install
configure.ac: installing './install-sh'
configure.ac: installing './missing'
configure.ac: installing './compile'
src/Makefile.am: installing './depcomp'

At this point the build system is complete.

In addition to the three scripts mentioned in its output, you can seethat autoreconf created four other files: configure,config.h.in, Makefile.in, and src/Makefile.in.The latter three files are templates that will be adapted to thesystem by configure under the names config.h,Makefile, and src/Makefile. Let’s do this:

~/amhello % ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... no
checking for mawk... mawk
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...
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 ISO C89... 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: creating src/Makefile
config.status: creating config.h
config.status: executing depfiles commands

You can see Makefile, src/Makefile, and config.hbeing created at the end after configure has probed thesystem. It is now possible to run all the targets we wish(see Standard Targets). For instance:

~/amhello % make
…
~/amhello % src/hello
Hello World!
This is amhello 1.0.
~/amhello % make distcheck
…
=============================================
amhello-1.0 archives ready for distribution:
amhello-1.0.tar.gz
=============================================

Note that running autoreconf is only needed initially whenthe GNU Build System does not exist. When you later change someinstructions in a Makefile.am or configure.ac, therelevant part of the build system will be regenerated automaticallywhen you execute make

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值