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