Autoconf setup
File: autogen.sh
../../std-autogen.sh ../../.. # fetch Antimake template from libusual cp ../../antimake.mk antimake.mk.in
File: configure.ac
AC_INIT([actest], [0.1]) AC_CONFIG_SRCDIR([prog.c]) AC_PREREQ([2.59]) LT_INIT AC_USUAL_INIT AC_USUAL_PROGRAM_CHECK AC_OUTPUT([antimake.mk])
Here are the source files:
File: prog.c
void func1(void); int main(void) { func1(); return 0; }
File: func.c
#include <stdio.h> void func1(void); void func1(void) { printf("hello from func1\n"); }
Antimake based Makefile
File: Makefile
lib_LTLIBRARIES = libtemo.la libtemo_la_SOURCES = func.c libtemo_la_LDFLAGS = -version-info 3:0:2 bin_PROGRAMS = prog prog_SOURCES = prog.c prog_LDADD = libtemo.la # clean configured files DISTCLEANFILES = \ config.status \ config.log \ antimake.mk \ libtool # clean generated files MAINTAINERCLEANFILES = \ configure \ config.guess \ config.sub \ install-sh \ antimake.mk.in \ ltmain.sh EXTRA_DIST = \ Makefile \ $(MAINTAINERCLEANFILES) # launch Antimake include antimake.mk
Build the project
$ sh ./autogen.sh
$ ./configure
[...]
$ make
CC prog.c
CC func.c
CCLD libtemo.la
CCLD prog
$ ls
Makefile autogen.sh config.status configure.ac libtemo.la prog
antimake.mk config.guess config.sub func.c libtool prog.c
antimake.mk.in config.log configure install-sh ltmain.sh
$ ./prog
hello from func1
Create distribution package
$ make dist
CHECK dist-gzip
MKDIR actest-0.1
COPY actest-0.1
PACK actest-0.1.tar.gz
$ tar tzf actest-0.1.tar.gz | sort
actest-0.1/
actest-0.1/Makefile
actest-0.1/antimake.mk.in
actest-0.1/config.guess
actest-0.1/config.sub
actest-0.1/configure
actest-0.1/func.c
actest-0.1/install-sh
actest-0.1/ltmain.sh
actest-0.1/prog.c
Test installation
$ make install DESTDIR=/tmp/test-inst
INSTALL prog /tmp/test-inst/usr/local/bin
INSTALL libtemo.la /tmp/test-inst/usr/local/lib
libtool: install: warning: remember to run `libtool --finish /usr/local/lib'
$ ls
Makefile autogen.sh config.sub install-sh prog
actest-0.1.tar.gz config.guess configure libtemo.la prog.c
antimake.mk config.log configure.ac libtool
antimake.mk.in config.status func.c ltmain.sh
$ find /tmp/test-inst | sort
/tmp/test-inst
/tmp/test-inst/usr
/tmp/test-inst/usr/local
/tmp/test-inst/usr/local/bin
/tmp/test-inst/usr/local/bin/prog
/tmp/test-inst/usr/local/lib
/tmp/test-inst/usr/local/lib/libtemo.a
/tmp/test-inst/usr/local/lib/libtemo.la
/tmp/test-inst/usr/local/lib/libtemo.so
/tmp/test-inst/usr/local/lib/libtemo.so.1
/tmp/test-inst/usr/local/lib/libtemo.so.1.2.0
$ rm -rf /tmp/test-inst
Test the distribution package and separate build dir
$ mkdir -p test
$ cd test
$ tar xf ../actest-0.1.tar.gz
$ mkdir build
$ cd build
$ ../actest-0.1/configure
[...]
$ make
CC ../actest-0.1/prog.c
CC ../actest-0.1/func.c
CCLD libtemo.la
CCLD prog
$ ls
Makefile antimake.mk config.log config.status libtemo.la libtool prog
$ ./prog
hello from func1
$ cd ../..
Clean up
$ make maintainer-clean
CLEAN prog
CLEAN libtemo.la
MAINTAINERCLEAN maintainer-clean
$ ls
Makefile actest-0.1.tar.gz autogen.sh configure.ac func.c prog.c test
Done