Personal tools
You are here: Home Developers Developers' Workshops Honolulu, 2012 Simple Makefile for ADMB

Simple Makefile for ADMB

Tested with gnu make under 64bit linux. Some modifications required for other configurations. Steve added contributed libraries to path.
# to make executables with ADMB "safe" library, simply type make target
# to make executables with ADMB "optimized" library, type make OPT=TRUE (yes, upper case) target
# the safe version also sets the debugger flag and does no optimization
#
# identify some extra file name suffixes
.SUFFIXES: .tpl .cpp .o .obj

# tell make not to delete these intermediate targets
.PRECIOUS: %.cpp %.o %.obj

# make some special targets
.PHONY: default rules

# does this if no target is specified on command line
default:
	@echo No target specified.
	@echo Usage: make target, e. g. make simple
	@echo        specify OPT=TRUE to build optimized version


# establish the C++ compiler
CC=g++
# and linker
LL=$(CC)

# set up ADMB flags and appropriate libraries
# make the "safe" version by default
# to make "the optimized" version, type  `make OPT=TRUE
ifeq ($(OPT),TRUE)
  CC_OPT = -O3 -DOPT_LIB
  LFLAGS=  -L$(ADMB_HOME)/lib -L$(ADMB_HOME)/contrib -ldf1b2o -ladmod -ladt -lado -lcontribo -ldf1b2o -ladmod -ladt -lado -lcontribo
else
  CC_OPT = -v -ggdb -DSAFE_ARRAYS
  LFLAGS= -v -L$(ADMB_HOME)/lib -L$(ADMB_HOME)/contrib -ldf1b2s -ladmod -ladt -lads -ldf1b2s -lcontribs -ladmod -ladt -lads -ldf1b2s -lcontribs
  OPT = FALSE
endif

# set general compiler flags
CFLAGS = -c -m64 -Wall -Wno-deprecated -fpermissive $(CC_OPT) -I$(ADMB_HOME)/include -I$(ADMB_HOME)/contrib -I. -D__GNUDOS__ -Dlinux -DUSE_LAPLACE

# link the object file into the executable 
%:%.o;
	$(LL) -o $@ $^ $(LFLAGS)

# compile the C++ into an object file
%.o:%.cpp;
	$(CC) $(CFLAGS)  -o $@ $<

# translate the ADMB template into C++ code
%.cpp:%.tpl;
	$(ADMB_HOME)/bin/tpl2cpp $*

# generate some information about what your are doing
rules:
	@echo OPT = $(OPT)
	@echo CC_OPT = $(CC_OPT)
	@echo PWD = $(PWD)
	@echo OSTYPE = $(OSTYPE)
	@echo OS     = $(OS)
	@echo ADMB_HOME = $(ADMB_HOME)
	@echo CC = $(CC)
	$(CC) --version
	@echo LL = $(LL)
	@echo CFLAGS = $(CFLAGS)
	@echo LFLAGS = $(LFLAGS)