4.1.1. Creating and Running a Project Based on GNU Autotools

Follow these steps to create a simple Autotools-based project:

  1. Create your directory: Create a clean directory for your project and then make that directory your working location:

         $ mkdir $HOME/helloworld
         $ cd $HOME/helloworld
                            

  2. Populate the directory: Create hello.c, Makefile.am, and configure.ac files as follows:

    • For hello.c, include these lines:

           #include <stdio.h>
      
           main()
              {
                 printf("Hello World!\n");
              }
                                      

    • For Makefile.am, include these lines:

           bin_PROGRAMS = hello
           hello_SOURCES = hello.c
                                      

    • For configure.in, include these lines:

           AC_INIT(hello,0.1)
           AM_INIT_AUTOMAKE([foreign])
           AC_PROG_CC
           AC_PROG_INSTALL
           AC_OUTPUT(Makefile)
                                      

  3. Source the cross-toolchain environment setup file: As described earlier in the manual, installing the cross-toolchain creates a cross-toolchain environment setup script in the directory that the SDK was installed. Before you can use the tools to develop your project, you must source this setup script. The script begins with the string "environment-setup" and contains the machine architecture, which is followed by the string "poky-linux". Here is an example that sources a script from the default SDK installation directory that uses the 32-bit Intel x86 Architecture and the TBD Yocto Project release:

         $ source /opt/poky/2.3/environment-setup-i586-poky-linux
                            

  4. Generate the local aclocal.m4 files and create the configure script: The following GNU Autotools generate the local aclocal.m4 files and create the configure script:

         $ aclocal
         $ autoconf
                            

  5. Generate files needed by GNU coding standards: GNU coding standards require certain files in order for the project to be compliant. This command creates those files:

         $ touch NEWS README AUTHORS ChangeLog
                            

  6. Generate the configure file: This command generates the configure:

         $ automake -a
                            

  7. Cross-compile the project: This command compiles the project using the cross-compiler. The CONFIGURE_FLAGS environment variable provides the minimal arguments for GNU configure:

         $ ./configure ${CONFIGURE_FLAGS}
                            

  8. Make and install the project: These two commands generate and install the project into the destination directory:

         $ make
         $ make install DESTDIR=./tmp
                            

  9. Verify the installation: This command is a simple way to verify the installation of your project. Running the command prints the architecture on which the binary file can run. This architecture should be the same architecture that the installed cross-toolchain supports.

         $ file ./tmp/usr/local/bin/hello
                            

  10. Execute your project: To execute the project in the shell, simply enter the name. You could also copy the binary to the actual target hardware and run the project there as well:

         $ ./hello
                            

    As expected, the project displays the "Hello World!" message.