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

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Makefile Generation From Autotools

1,744
views

Published on

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"


0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,744
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
24
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

×