Difference between revisions of "Autotools"
From HCL
(10 intermediate revisions by 3 users not shown) | |||
Line 7: | Line 7: | ||
* http://www.gnu.org/software/automake/manual/index.html | * http://www.gnu.org/software/automake/manual/index.html | ||
* http://www.gnu.org/software/libtool/manual/index.html | * http://www.gnu.org/software/libtool/manual/index.html | ||
+ | |||
+ | == Tutorials == | ||
+ | * http://www.lrde.epita.fr/~adl/autotools.html (very nice set of slides) | ||
== Libraries == | == Libraries == | ||
Line 12: | Line 15: | ||
* library: static <code>lib_LIBRARIES = library.a</code> or dynamic <code>lib_LTLIBRARIES = library.la</code> | * library: static <code>lib_LIBRARIES = library.a</code> or dynamic <code>lib_LTLIBRARIES = library.la</code> | ||
* sources (internal C data structures and C++ template classes): <code>library_X_SOURCES = library.h ...</code>, where <code>X</code> = <code>a</code> or <code>la</code> | * sources (internal C data structures and C++ template classes): <code>library_X_SOURCES = library.h ...</code>, where <code>X</code> = <code>a</code> or <code>la</code> | ||
− | |||
− | + | [http://gforge.ucd.ie/scm/viewvc.php/*checkout*/trunk/MPIBlib/benchmarks/Makefile.am?root=cpm Example] | |
== Configured headers == | == Configured headers == | ||
Line 21: | Line 23: | ||
* <code>nodist_*_SOURCES = *.h</code> or <code>BUILT_SOURCES = *.h</code> for the configured headers as sources | * <code>nodist_*_SOURCES = *.h</code> or <code>BUILT_SOURCES = *.h</code> for the configured headers as sources | ||
− | + | [http://gforge.ucd.ie/scm/viewvc.php/*checkout*/trunk/MPIBlib/collectives/Makefile.am?root=cpm Example] | |
== Extra files == | == Extra files == | ||
To add extra files into package, use <code>EXTRA_DIST = *</code>. | To add extra files into package, use <code>EXTRA_DIST = *</code>. | ||
− | + | [http://gforge.ucd.ie/scm/viewvc.php/*checkout*/trunk/MPIBlib/tools/Makefile.am?root=cpm Example] | |
== Conditional building == | == Conditional building == | ||
− | http:// | + | * http://www.gnu.org/software/hello/manual/automake/Conditionals.html |
+ | * In the source code, use macros | ||
+ | <source lang="C"> | ||
+ | #ifdef SYMBOL | ||
+ | ... | ||
+ | #endif | ||
+ | </source> | ||
+ | |||
+ | == MPI support == | ||
+ | * Define MPI compilers/linkers in configure.ac | ||
+ | <source lang="text"> | ||
+ | AC_PROG_CC([mpicc]) | ||
+ | AC_PROG_CXX([mpic++ mpicxx]) | ||
+ | </source> | ||
+ | |||
+ | == C/C++ support == | ||
+ | * To check C++ features, switch to C++ language in configure.ac | ||
+ | <source lang="text"> | ||
+ | AC_LANG_PUSH(C++) | ||
+ | AC_CHECK_HEADER([header.hpp]) | ||
+ | AC_LANG_POP(C++) | ||
+ | </source> | ||
+ | * To link C code with C++ libraries, add a non-existent C++ file dummy.cpp to sources in Makefile.am | ||
+ | <source lang="text"> | ||
+ | bin_PROGRAMS = program | ||
+ | program_SOURCES = program.c | ||
+ | nodist_EXTRA_program_SOURCES = dummy.cpp | ||
+ | program_LDADD = cpplibrary.a | ||
+ | </source> | ||
+ | |||
+ | == Script for downloading & installing recent versions (in March 2010) of m4, libtool, autoconf, automake== | ||
+ | |||
+ | #!/bin/bash | ||
+ | parent_dir=$PWD | ||
+ | export PATH=$HOME/$ARCH/bin:$PATH | ||
+ | wget http://ftp.gnu.org/gnu/libtool/libtool-2.2.6b.tar.gz | ||
+ | tar xzf libtool-2.2.6b.tar.gz | ||
+ | cd libtool-2.2.6b | ||
+ | ./configure --prefix=$HOME/$ARCH | ||
+ | make install | ||
+ | cd $parent_dir | ||
+ | wget http://ftp.gnu.org/gnu/m4/m4-1.4.14.tar.gz | ||
+ | tar xfz m4-1.4.14.tar.gz | ||
+ | cd m4-1.4.14 | ||
+ | ./configure --prefix=$HOME/$ARCH | ||
+ | make install | ||
+ | cd $parent_dir | ||
+ | wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.65.tar.bz2 | ||
+ | tar xjf autoconf-2.65.tar.bz2 | ||
+ | cd autoconf-2.65 | ||
+ | ./configure --prefix=$HOME/$ARCH | ||
+ | make install | ||
+ | cd $parent_dir | ||
+ | wget http://ftp.gnu.org/gnu/automake/automake-1.10.3.tar.bz2 | ||
+ | tar xjf automake-1.10.3.tar.bz2 | ||
+ | cd automake-1.10.3 | ||
+ | ./configure --prefix=$HOME/$ARCH | ||
+ | make install | ||
+ | cd $parent_dir |
Latest revision as of 10:01, 16 August 2012
http://en.wikipedia.org/wiki/Autoconf
http://sourceware.org/autobook/autobook/autobook_toc.html
Contents
Manuals
- http://www.gnu.org/software/autoconf/manual/index.html
- http://www.gnu.org/software/automake/manual/index.html
- http://www.gnu.org/software/libtool/manual/index.html
Tutorials
- http://www.lrde.epita.fr/~adl/autotools.html (very nice set of slides)
Libraries
- includes (for the include directory):
include_HEADERS = ...
- library: static
lib_LIBRARIES = library.a
or dynamiclib_LTLIBRARIES = library.la
- sources (internal C data structures and C++ template classes):
library_X_SOURCES = library.h ...
, whereX
=a
orla
Configured headers
Configured headers (created from *.h.in) must not be included into the package, that is include_HEADERS
or *_SOURCES
-
nodist_include_HEADERS = *.h
for the configured headers as includes -
nodist_*_SOURCES = *.h
orBUILT_SOURCES = *.h
for the configured headers as sources
Extra files
To add extra files into package, use EXTRA_DIST = *
.
Conditional building
- http://www.gnu.org/software/hello/manual/automake/Conditionals.html
- In the source code, use macros
#ifdef SYMBOL
...
#endif
MPI support
- Define MPI compilers/linkers in configure.ac
AC_PROG_CC([mpicc])
AC_PROG_CXX([mpic++ mpicxx])
C/C++ support
- To check C++ features, switch to C++ language in configure.ac
AC_LANG_PUSH(C++)
AC_CHECK_HEADER([header.hpp])
AC_LANG_POP(C++)
- To link C code with C++ libraries, add a non-existent C++ file dummy.cpp to sources in Makefile.am
bin_PROGRAMS = program
program_SOURCES = program.c
nodist_EXTRA_program_SOURCES = dummy.cpp
program_LDADD = cpplibrary.a
Script for downloading & installing recent versions (in March 2010) of m4, libtool, autoconf, automake
#!/bin/bash parent_dir=$PWD export PATH=$HOME/$ARCH/bin:$PATH wget http://ftp.gnu.org/gnu/libtool/libtool-2.2.6b.tar.gz tar xzf libtool-2.2.6b.tar.gz cd libtool-2.2.6b ./configure --prefix=$HOME/$ARCH make install cd $parent_dir wget http://ftp.gnu.org/gnu/m4/m4-1.4.14.tar.gz tar xfz m4-1.4.14.tar.gz cd m4-1.4.14 ./configure --prefix=$HOME/$ARCH make install cd $parent_dir wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.65.tar.bz2 tar xjf autoconf-2.65.tar.bz2 cd autoconf-2.65 ./configure --prefix=$HOME/$ARCH make install cd $parent_dir wget http://ftp.gnu.org/gnu/automake/automake-1.10.3.tar.bz2 tar xjf automake-1.10.3.tar.bz2 cd automake-1.10.3 ./configure --prefix=$HOME/$ARCH make install cd $parent_dir