Makefile Generation From Autotools
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Makefile Generation From Autotools

on

  • 2,267 views

How autotools work and what you need to do get let your project build by "configure;make;make install"

How autotools work and what you need to do get let your project build by "configure;make;make install"

Statistics

Views

Total Views
2,267
Views on SlideShare
2,264
Embed Views
3

Actions

Likes
1
Downloads
21
Comments
0

2 Embeds 3

http://www.linkedin.com 2
http://www.slideshare.net 1

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Makefile Generation From Autotools Presentation Transcript

  • 1. Makefile generation from Autotools
      • Waqqas Jabbar
  • 2. Prerequisites
    • C, C++
    • gcc and its options
    • make and Makefile
    • configure and its options
    • pkg-config
  • 3. Objectives
    • Use autotools to generate Makefiles, for
      • Dynamic and Static libraries
      • Executable
    • Use libtool to generate libraries
  • 4. Autotools
    • Collection of utilities
      • automake
      • autoconf
      • libtoolize
      • aclocal
      • autoheader
      • autoscan
      • autoupdate
      • autoreconf
    • Can be used separately or together
  • 5. Inputs to autotools
    • configure.ac
    • Makefile.ac
    • config.h.in
    • Source code
  • 6. Outputs of autotools
    • config.h
      • Added in project
      • Conditional compilation
        • #ifdef, #elif, #endif
    • Makefile(s)
      • Input to make
  • 7. ? config.h Makefile Makefile.in Source code configure.ac autoscan autoheader automake config.h.in Makefile.am autoconf configure.scan configure configure
  • 8. config.h Makefile Makefile.in Source code configure.ac autoscan autoheader automake config.h.in Makefile.am autoconf configure.scan configure configure
  • 9. autoscan
    • Input: Source code
    • Output: configure.scan
      • Template for configure.ac
  • 10. autoheader
    • Input: configure.ac, Source code
    • Output: config.h.in
      • What defines are to be generated in config.h
        • #undef VAR -> #define VAR 1 ( by configure)
  • 11. automake
    • Input: Makefile.am
    • Output: Makefile.in
    • Convert automake variables to their values
  • 12. autoconf
    • Input: configure.ac
    • Output: configure
      • Shell script
  • 13. configure
    • Input: config.h.in, Makefile.in
    • Output: config.h, Makefile(s)
  • 14. Makefile.in
    • Syntax of Makefile
  • 15. Makefile.am
    • Executables
      • Installation binaries
        • bin_PROGRAMS = foo1
      • Non-Installation binaries
        • noinst_PROGRAMS = foo2
      • foo1_SOURCES = foo1.c foo1.h
      • INCLUDES=-I $HOME/usr/include
      • LDADD=-lpthread
      • AM_CFLAGS=-DMY_DEFINE
      • foo1extradir=$(datadir)/foo1
      • foo1extra_DATA= foo1.conf
  • 16. Makefile.am
    • Libraries
      • Installation Libraries
        • lib_LTLIBRARIES=libtest.la
        • library_includedir= The directory where header files will be installed
        • library_include_HEADERS= Header files exposed by the library
      • Non-installation libraries
        • noinst_LTLIBRARIES=
      • libtest_la_SOURCES =
      • libtest_la_LDFLAGS =
      • INCLUDES = -I.
      • libtest_la_LIBADD= (other libraries to add)
  • 17. Makefile.am
    • Predefined variables
      • $(top_srcdir) : Main directory of source-code
      • $(includedir) : Path specified in configure for installing header files
    • SUBDIRS =
  • 18. configure.ac
    • Set of M4 Macros
    • Initialization
      • AC_PREREQ
      • AC_INIT
      • AC_CONFIG_HEADER(config.h)
      • AM_INIT_AUTOMAKE
    • Checks for programs
      • AC_PROG_CC
      • AC_PROG_CXX
      • AC_PROG_INSTALL
      • AM_PROG_LIBTOOL
      • AM_SANITY_CHECK
  • 19. configure.ac
    • Checks for libraries
      • pkg-config
        • PKG_CHECK_MODULES(SNDFILE_DEPS, sndfile >= 1.0.17)
        • AC_SUBST(SNDFILE_DEPS_CFLAGS)
        • AC_SUBST(SNDFILE_DEPS_LIBS)
      • AC_SUBST passes variable from configure.ac to Makefile.am
  • 20. configure.ac
      • No script
        • AC_CHECK_LIB
        • AC_ARG_WITH(mysql, [ --with-mysql=<path> prefix of MySQL installation. e.g. /usr/local or /usr], [MYSQL_PREFIX=$with_mysql], AC_MSG_ERROR([You must call configure with the --with-mysql option. This tells configure where to find the MySql C library and headers. e.g. --with-mysql=/usr/local or --with-mysql=/usr]))
        • AC_SUBST(MYSQL_PREFIX)
        • MYSQL_LIBS=&quot;-L${MYSQL_PREFIX}/lib/mysql -lmysqlclient&quot;
        • MYSQL_CFLAGS=&quot;-I${MYSQL_PREFIX}/include&quot;
        • AC_SUBST(MYSQL_LIBS)
        • AC_SUBST(MYSQL_CFLAGS)
  • 21. configure.ac
    • Checks for header files
      • AC_HEADER_STDC
      • AC_CHECK_HEADERS([string.h])
    • Checks for typedefs, structures, and compiler characteristics
    • Checks for library functions
      • AC_CHECK_FUNCS([bzero])
    • Give Makefile to generate
      • AC_CONFIG_FILES([Makefile])
      • AC_OUTPUT
  • 22. configure.ac
    • Adding option in configure script
      • AC_ARG_ENABLE(option-foo,[ --enable-option-foo help for option foo], [CFLAGS= &quot;$CFLAGS -DOPTION_FOO_DEFINE&quot;], [])
    • Disable shared libraries
      • AC_DISABLE_SHARED
  • 23. References
    • http://www.elitecoders.de/mags/cscene/CS2/CS2-10.html
    • http://www.openismus.com/documents/linux/automake/automake.shtml
    • http://www.openismus.com/documents/linux/using_libraries/using_libraries.shtml
    • http://www.openismus.com/documents/linux/building_libraries/building_libraries.shtml
    • http://bec-systems.com/web/content/view/95/9/
    • http://sources.redhat.com/autobook/autobook/autobook_toc.html#SEC_Contents
    • http://www.gnu.org/manual/manual.html
    • Examples
      • http://www.openismus.com/documents/linux/building_libraries/examplelib-0.3.0.tar.gz
      • http://www.openismus.com/documents/linux/using_libraries/examplelib_example-0.3.0.tar.gz
  • 24. Summary
    • You can generate distributions in tar.gz or rpm
  • 25. Thank You