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

Makefile Generation From Autotools

on

  • 2,218 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,218
Views on SlideShare
2,215
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 Makefile Generation From Autotools Presentation Transcript

  • Makefile generation from Autotools
      • Waqqas Jabbar
  • Prerequisites
    • C, C++
    • gcc and its options
    • make and Makefile
    • configure and its options
    • pkg-config
  • Objectives
    • Use autotools to generate Makefiles, for
      • Dynamic and Static libraries
      • Executable
    • Use libtool to generate libraries
  • Autotools
    • Collection of utilities
      • automake
      • autoconf
      • libtoolize
      • aclocal
      • autoheader
      • autoscan
      • autoupdate
      • autoreconf
    • Can be used separately or together
  • Inputs to autotools
    • configure.ac
    • Makefile.ac
    • config.h.in
    • Source code
  • Outputs of autotools
    • config.h
      • Added in project
      • Conditional compilation
        • #ifdef, #elif, #endif
    • Makefile(s)
      • Input to make
  • ? config.h Makefile Makefile.in Source code configure.ac autoscan autoheader automake config.h.in Makefile.am autoconf configure.scan configure configure
  • config.h Makefile Makefile.in Source code configure.ac autoscan autoheader automake config.h.in Makefile.am autoconf configure.scan configure configure
  • autoscan
    • Input: Source code
    • Output: configure.scan
      • Template for configure.ac
  • 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)
  • automake
    • Input: Makefile.am
    • Output: Makefile.in
    • Convert automake variables to their values
  • autoconf
    • Input: configure.ac
    • Output: configure
      • Shell script
  • configure
    • Input: config.h.in, Makefile.in
    • Output: config.h, Makefile(s)
  • Makefile.in
    • Syntax of Makefile
  • 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
  • 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)
  • Makefile.am
    • Predefined variables
      • $(top_srcdir) : Main directory of source-code
      • $(includedir) : Path specified in configure for installing header files
    • SUBDIRS =
  • 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
  • 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
  • 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)
  • 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
  • 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
  • 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
  • Summary
    • You can generate distributions in tar.gz or rpm
  • Thank You