Makefile examples: Compact

From Wiki**3

<text>

  1. ----------------------------------------------------------------------------
  2. CONFIGURE THESE VARIABLES IF NEEDED
  3. ----------------------------------------------------------------------------

ROOT = ${HOME}/compiladores/root CDK_INC_DIR = $(ROOT)/usr/include CDK_LIB_DIR = $(ROOT)/usr/lib

L_NAME=CompactScanner Y_NAME=CompactParser

YFLAGS = -dtv

  1. CXXFLAGS = -Wall -O6 -s -Isemantics -I. -I$(CDK_INC_DIR)

CXXFLAGS = -ggdb -Isemantics -I. -I$(CDK_INC_DIR) LDFLAGS = -L$(CDK_LIB_DIR) -lcdk COMPILER = compact

SRC_CPP = $(wildcard nodes/*.cpp) $(wildcard semantics/*.cpp) \

         $(wildcard ./*.cpp)

OFILES = $(SRC_CPP:%.cpp=%.o)

  1. ----------------------------------------------------------------------------
  2. DO NOT CHANGE AFTER THIS LINE
  3. ----------------------------------------------------------------------------

all: $(COMPILER)

%.o:: %.c

       $(CXX) $(CXXFLAGS) -c $< -o $@

%.o:: %.cpp

       $(CXX) $(CXXFLAGS) -c $< -o $@

%.tab.c:: %.y

        byacc -dtv -b $* $<

%.tab.h:: %.y

        byacc -dtv -b $* $<

$(L_NAME).cpp: $(L_NAME).l

       flex $<

$(Y_NAME).tab.c: $(Y_NAME).y $(Y_NAME).tab.h: $(Y_NAME).y

  1. this is needed to force byacc to run

$(L_NAME).o: $(L_NAME).cpp $(Y_NAME).tab.h

$(COMPILER): $(L_NAME).o $(Y_NAME).tab.o $(OFILES)

       $(CXX) -o $@ $^ $(LDFLAGS)

clean:

       $(RM) *.tab.[ch] *.o $(OFILES) $(L_NAME).cpp $(Y_NAME).output $(COMPILER)

depend:

       $(CXX) $(CXXFLAGS) -MM *.cpp > .makedeps

-include .makedeps </text>