This is an old revision of the document!
The standard ACT Makefile structure
The following is a simple Makefile that uses the ACT standard makefile to create an executable called example, and which links against the core ACT library as well as the default passes.
BINARY=example.$(EXT)
TARGETS=$(BINARY)
OBJS=main.o
SRCS=$(OBJS:.o=.cc)
include $(ACT_HOME)/scripts/Makefile.std
$(BINARY): $(LIB) $(OBJS) $(ACTPASSDEPEND)
$(CXX) $(CFLAGS) $(OBJS) -o $(BINARY) $(LIBACTPASS)
-include Makefile.deps
The variable EXT is set to an extension that combines the architecture and operating system. So this might look something like arm64_darwin23_5_0 for an Apple M-series Mac, or x86_64_linux5_15_0 on an x86 Linux platform. The makefile creates a directory called $(EXT), and the object files generated are placed in that directory.1)
Standard targets defined are:
make depend: createsMakefiles.depwith dependencies.make: this should build the executablemake install: installs all files into$(ACT_HOME)make clean: removes object files but keeps all targets that were builtmake realclean: removes targets as well (in addition to what is done with just clean).
The object files can be moved into the working directory using:
$ make move-in
They can be put back into the architecture-specific directory using:
make move-out
Changing compilers
The variables CC and 'CXX can be changed to modify the default C and C++ compilers respectively.
So:
<code>
$ make CXX=clang++
</code>
will use clang++ as the C++ compiler for the build.
===== Debug builds =====
The C/C++ compilers are passed the C_COMPILER_OPTIONS environment variable. This is normally set to -O2, but can be set to -g'' during the build process like this:
$ make C_COMPILER_FLAGS=-g