From 5c152fc2966cad01dc403ebfa4137a589b415cac Mon Sep 17 00:00:00 2001 From: yangfl Date: Mon, 22 Feb 2021 00:24:45 +0800 Subject: [PATCH] Make C++ shared lib Origin: Debian Upstream-Status: Unknown [ismael@sourcemage.org: Removed compatibility code, added .pc file to the "all" target, removed static lib support, and simplified the makefile] Signed-off-by: Ismael Luceno --- cpp/Makefile | 39 +++++++++++++++++++++++++++++++++------ cpp/qrcodegencpp.pc.in | 10 ++++++++++ 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/cpp/Makefile b/cpp/Makefile index 57dc0bf..d95c7e2 100644 --- a/cpp/Makefile +++ b/cpp/Makefile @@ -51,29 +51,56 @@ CXXFLAGS += -std=c++11 -O # ---- Targets to build ---- LIB = qrcodegencpp -LIBFILE = lib$(LIB).a +LIBFILE = lib$(LIB).so +SO_NAME = $(LIBFILE).1 +REAL_NAME = $(LIBFILE).$(VERSION) +PCFILE := $(LIB).pc +HEADERS = qrcodegen.hpp LIBOBJ = qrcodegen.o MAINS = QrCodeGeneratorDemo +MULTIARCH = $(shell $(CC) --print-multiarch) + +PREFIX = /usr +INCLUDEDIR = include/qrcodegen +LIBDIR = lib/$(MULTIARCH) + # Build all binaries -all: $(LIBFILE) $(MAINS) +all: $(LIBFILE) $(PCFILE) # Delete build output clean: - rm -f -- $(LIBOBJ) $(LIBFILE) $(MAINS:=.o) $(MAINS) + rm -f -- $(LIBOBJ) $(LIBFILE) $(MAINS:=.o) $(MAINS) $(PCFILE) rm -rf .deps +.PHONY: install-shared install-header install +install: install-shared install-header + +install-shared: $(LIBFILE) + install -d $(DESTDIR)$(PREFIX)/$(LIBDIR) + install -m 444 $< $(DESTDIR)$(PREFIX)/$(LIBDIR)/$(REAL_NAME) + ln -sf $(REAL_NAME) $(DESTDIR)$(PREFIX)/$(LIBDIR)/$(SO_NAME) + ln -sf $(SO_NAME) $(DESTDIR)$(PREFIX)/$(LIBDIR)/$(LIBFILE) + +install-header: $(HEADERS) $(PCFILE) + install -d $(DESTDIR)$(PREFIX)/$(INCLUDEDIR) $(DESTDIR)$(PREFIX)/$(LIBDIR)/pkgconfig + install -m 444 $(HEADERS) $(DESTDIR)$(PREFIX)/$(INCLUDEDIR)/ + install -m 444 $(PCFILE) $(DESTDIR)$(PREFIX)/$(LIBDIR)/pkgconfig/ + # Executable files %: %.o $(LIBFILE) - $(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $< -L . -l $(LIB) + $(CXX) $(CPPFLAGS) $(CXXFLAGS) -o $@ $< -L . -l $(LIB) $(LDFLAGS) # The library $(LIBFILE): $(LIBOBJ) + $(CXX) -shared -Wl,-soname,$(SO_NAME) $(LDFLAGS) -o $@ $^ - $(AR) -crs $@ -- $^ +$(PCFILE): $(PCFILE).in + sed 's|@prefix@|$(PREFIX)|; s|@libdir@|$(LIBDIR)|; s|@includedir@|$(INCLUDEDIR)|; s|@version@|$(VERSION)|' $< > $@ + # Object files %.o: %.cpp .deps/timestamp - $(CXX) $(CXXFLAGS) -c -o $@ -MMD -MF .deps/$*.d $< + $(CXX) $(CPPFLAGS) $(CXXFLAGS) -fPIC -c -o $@ -MMD -MF .deps/$*.d $< # Have a place to store header dependencies automatically generated by compiler .deps/timestamp: diff --git a/cpp/qrcodegencpp.pc.in b/cpp/qrcodegencpp.pc.in new file mode 100644 index 0000000..6c170ba --- /dev/null +++ b/cpp/qrcodegencpp.pc.in @@ -0,0 +1,10 @@ +prefix=@prefix@ +libdir=${prefix}/@libdir@ +includedir=${prefix}/@includedir@ + +Name: qrcodegencpp +Description: QR Code generator library in multiple languages - C++ version +Version: @version@ +URL: https://github.com/nayuki/QR-Code-generator +Libs: -L${libdir} -lqrcodegencpp +Cflags: -I${includedir} .