Your SlideShare is downloading. ×
  • Like
Makefile Generation From Autotools
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Makefile Generation From Autotools

  • 1,712 views
Published

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"

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,712
On SlideShare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
23
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

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