55LD := $(CXX )
66
77MSG_PREFIX ?=
8- ABCSRC = .
8+ ABCSRC ?= .
9+ VPATH = $(ABCSRC )
910
1011$(info $(MSG_PREFIX)Using CC=$(CC))
1112$(info $(MSG_PREFIX)Using CXX=$(CXX))
@@ -41,7 +42,7 @@ default: $(PROG)
4142ARCHFLAGS_EXE ?= ./arch_flags
4243
4344$(ARCHFLAGS_EXE ) : arch_flags.c
44- $(CC ) arch_flags.c -o $(ARCHFLAGS_EXE )
45+ $(CC ) $< -o $(ARCHFLAGS_EXE )
4546
4647INCLUDES += -I$(ABCSRC ) /src
4748
@@ -138,11 +139,11 @@ endif
138139
139140# LIBS := -ldl -lrt
140141LIBS += -lm
141- ifneq ($(OS ) , FreeBSD)
142+ ifneq ($(OS ) , $( filter $( OS ) , FreeBSD OpenBSD NetBSD) )
142143 LIBS += -ldl
143144endif
144145
145- ifneq ($(findstring Darwin , $(shell uname) ) , Darwin)
146+ ifneq ($(OS ) , $(filter $( OS ) , FreeBSD OpenBSD NetBSD Darwin) )
146147 LIBS += -lrt
147148endif
148149
@@ -152,7 +153,7 @@ ifdef ABC_USE_LIBSTDCXX
152153endif
153154
154155$(info $(MSG_PREFIX)Using CFLAGS=$(CFLAGS))
155- CXXFLAGS += $(CFLAGS ) -std=c++17
156+ CXXFLAGS += $(CFLAGS ) -std=c++17 -fno-exceptions
156157
157158SRC :=
158159GARBAGE := core core.* *.stackdump ./tags $(PROG ) arch_flags
@@ -174,26 +175,32 @@ DEP := $(OBJ:.o=.d)
174175# implicit rules
175176
176177% .o : % .c
178+ @mkdir -p $(dir $@ )
177179 @echo " $( MSG_PREFIX) \`\` Compiling:" $(LOCAL_PATH ) /$<
178180 $(VERBOSE )$(CC ) -c $(OPTFLAGS ) $(INCLUDES ) $(CFLAGS ) $< -o $@
179181
180182% .o : % .cc
183+ @mkdir -p $(dir $@ )
181184 @echo " $( MSG_PREFIX) \`\` Compiling:" $(LOCAL_PATH ) /$<
182185 $(VERBOSE )$(CXX ) -c $(OPTFLAGS ) $(INCLUDES ) $(CXXFLAGS ) $< -o $@
183186
184187% .o : % .cpp
188+ @mkdir -p $(dir $@ )
185189 @echo " $( MSG_PREFIX) \`\` Compiling:" $(LOCAL_PATH ) /$<
186190 $(VERBOSE )$(CXX ) -c $(OPTFLAGS ) $(INCLUDES ) $(CXXFLAGS ) $< -o $@
187191
188192% .d : % .c
193+ @mkdir -p $(dir $@ )
189194 @echo " $( MSG_PREFIX) \`\` Generating dependency:" $(LOCAL_PATH ) /$<
190195 $(VERBOSE )$(ABCSRC ) /depends.sh " $( CC) " ` dirname $* .c` $(OPTFLAGS ) $(INCLUDES ) $(CFLAGS ) $< > $@
191196
192197% .d : % .cc
198+ @mkdir -p $(dir $@ )
193199 @echo " $( MSG_PREFIX) \`\` Generating dependency:" $(LOCAL_PATH ) /$<
194200 $(VERBOSE )$(ABCSRC ) /depends.sh " $( CXX) " ` dirname $* .cc` $(OPTFLAGS ) $(INCLUDES ) $(CXXFLAGS ) $< > $@
195201
196202% .d : % .cpp
203+ @mkdir -p $(dir $@ )
197204 @echo " $( MSG_PREFIX) \`\` Generating dependency:" $(LOCAL_PATH ) /$<
198205 $(VERBOSE )$(ABCSRC ) /depends.sh " $( CXX) " ` dirname $* .cpp` $(OPTFLAGS ) $(INCLUDES ) $(CXXFLAGS ) $< > $@
199206
@@ -207,7 +214,10 @@ depend: $(DEP)
207214
208215clean :
209216 @echo " $( MSG_PREFIX) \`\` Cleaning up..."
210- $(VERBOSE ) rm -rvf $(PROG ) lib$(PROG ) .a $(OBJ ) $(GARBAGE ) $(OBJ:.o=.d )
217+ $(VERBOSE ) rm -rvf $(PROG ) lib$(PROG ) .a
218+ $(VERBOSE ) rm -rvf $(OBJ )
219+ $(VERBOSE ) rm -rvf $(GARBAGE )
220+ $(VERBOSE ) rm -rvf $(OBJ:.o=.d )
211221
212222tags :
213223 etags ` find . -type f -regex ' .*\.\(c\|h\)' `
0 commit comments