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]) AC_USUAL_INIT AC_USUAL_PROGRAM_CHECK AC_OUTPUT([antimake.mk])
Here is the source we want to build:
File: prog.c
#include <stdio.h> #include <string.h> int main(void) { printf("hello\n"); return 0; }
Antimake based Makefile
File: Makefile
# the automake-style build description for 'prog' noinst_PROGRAMS = prog prog_SOURCES = prog.c EXTRA_DIST = Makefile $(MAINTAINERCLEANFILES) # clean configured files DISTCLEANFILES = config.status config.log antimake.mk # clean generated files MAINTAINERCLEANFILES = configure config.guess config.sub install-sh antimake.mk.in # launch Antimake include antimake.mk
Build the project
$ sh ./autogen.sh $ ./configure [...] $ make CC prog.c CCLD prog $ ls Makefile autogen.sh config.status configure.ac prog.c antimake.mk config.guess config.sub install-sh antimake.mk.in config.log configure prog $ ./prog hello
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/install-sh actest-0.1/prog.c
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 CCLD prog $ ls Makefile antimake.mk config.log config.status prog $ ./prog hello $ cd ../..
Clean up
$ make maintainer-clean CLEAN prog MAINTAINERCLEAN maintainer-clean $ ls Makefile actest-0.1.tar.gz autogen.sh configure.ac prog.c test
Done