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.


Next: amhello's configure.ac Setup Explained, Up: Hello World   [Contents][Index]

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 
    #include 
    
    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], [[email protected]])
    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

你可能感兴趣的:(Generate Makefile new version.)