diff --git a/Makefile b/Makefile index db6ab346..2809f09d 100644 --- a/Makefile +++ b/Makefile @@ -1,25 +1,38 @@ CXX ?= g++ CFLAGS = -Wall -Wconversion -O3 -fPIC SHVER = 2 -OS = $(shell uname) +OS := $(shell uname) -all: svm-train svm-predict svm-scale +all: svm-train svm-predict svm-scale lib -lib: svm.o - if [ "$(OS)" = "Darwin" ]; then \ - SHARED_LIB_FLAG="-dynamiclib -Wl,-install_name,libsvm.so.$(SHVER)"; \ - else \ - SHARED_LIB_FLAG="-shared -Wl,-soname,libsvm.so.$(SHVER)"; \ - fi; \ - $(CXX) $${SHARED_LIB_FLAG} svm.o -o libsvm.so.$(SHVER) +ifeq ($(OS),Darwin) + DLLEXT := dylib + SHARED_LIB_FLAG = -dynamiclib +else + DLLEXT := so + SHARED_LIB_FLAG = -shared +endif + +libsvm.$(DLLEXT): svm.o + $(CXX) $(SHARED_LIB_FLAG) $^ -o $@ + +libsvm.$(DLLEXT).$(SHVER): libsvm.$(DLLEXT) + ln $< $@ + +libsvm.a: svm.o + ar rc $@ $^ + ranlib $@ + +.PHONY: lib +lib: libsvm.$(DLLEXT).$(SHVER) libsvm.a svm-predict: svm-predict.c svm.o - $(CXX) $(CFLAGS) svm-predict.c svm.o -o svm-predict -lm + $(CXX) $(CFLAGS) $^ -o $@ -lm svm-train: svm-train.c svm.o - $(CXX) $(CFLAGS) svm-train.c svm.o -o svm-train -lm + $(CXX) $(CFLAGS) $^ -o $@ -lm svm-scale: svm-scale.c - $(CXX) $(CFLAGS) svm-scale.c -o svm-scale + $(CXX) $(CFLAGS) $^ -o svm-scale svm.o: svm.cpp svm.h - $(CXX) $(CFLAGS) -c svm.cpp + $(CXX) $(CFLAGS) -c $< clean: - rm -f *~ svm.o svm-train svm-predict svm-scale libsvm.so.$(SHVER) + rm -f *~ svm.o svm-train svm-predict svm-scale libsvm.$(DLLEXT).$(SHVER) libsvm.a diff --git a/Makefile.win b/Makefile.win index 1c34d51b..ec66fd82 100644 --- a/Makefile.win +++ b/Makefile.win @@ -25,8 +25,11 @@ $(TARGET)\svm-toy.exe: svm.h svm.obj svm-toy\windows\svm-toy.cpp svm.obj: svm.cpp svm.h $(CXX) $(CFLAGS) -c svm.cpp -lib: svm.cpp svm.h svm.def - $(CXX) $(CFLAGS) -LD svm.cpp -Fe$(TARGET)\libsvm -link -DEF:svm.def +$(TARGET)\svm.dll $(TARGET)\svm.lib $(TARGET)\svm.exp: svm.cpp svm.h svm.def + $(CXX) $(CFLAGS) -LD svm.obj -Fe$(TARGET)\svm -link -DEF:svm.def + +.PHONY: lib +lib: $(TARGET)\svm.dll $(TARGET)\svm.lib $(TARGET)\svm.exp clean: -erase /Q *.obj $(TARGET)\. diff --git a/svm.def b/svm.def index 6bd1750e..5294fa36 100644 --- a/svm.def +++ b/svm.def @@ -1,4 +1,4 @@ -LIBRARY libsvm +LIBRARY svm EXPORTS svm_train @1 svm_cross_validation @2