1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
|
From 44ceffe24c0aa305658c43816df73965dd6fe241 Mon Sep 17 00:00:00 2001
From: yangfl <yangfl@users.noreply.github.com>
Date: Mon, 22 Feb 2021 00:24:45 +0800
Subject: [PATCH 3/3] Make C++ shared lib
---
cpp/Makefile | 53 +++++++++++++++++++++++++++++++++++++-----
cpp/qrcodegencpp.pc.in | 10 ++++++++
2 files changed, 57 insertions(+), 6 deletions(-)
create mode 100644 cpp/qrcodegencpp.pc.in
diff --git a/cpp/Makefile b/cpp/Makefile
index f83c512..4bfc070 100644
--- a/cpp/Makefile
+++ b/cpp/Makefile
@@ -50,30 +50,71 @@ CXXFLAGS += -std=c++11 -O
# ---- Targets to build ----
-LIB = qrcodegen
-LIBFILE = lib$(LIB).a
+LIB = qrcodegencpp
+LIBFILE = lib$(LIB).so
+ARFILE = lib$(LIB).a
+SO_NAME = $(LIBFILE).1
+REAL_NAME = $(LIBFILE).$(VERSION)
+PCFILE := $(LIB).pc
+HEADERS = QrCode.hpp
LIBOBJ = QrCode.o
MAINS = QrCodeGeneratorDemo QrCodeGeneratorWorker
+MULTIARCH ?= $(shell $(CC) --print-multiarch)
+
+PREFIX ?= /usr
+INCLUDEDIR ?= include/qrcodegen
+LIBDIR ?= lib/$(MULTIARCH)
+
# Build all binaries
-all: $(LIBFILE) $(MAINS)
+all: $(LIBFILE) $(ARFILE) $(MAINS)
# Delete build output
clean:
- rm -f -- $(LIBOBJ) $(LIBFILE) $(MAINS:=.o) $(MAINS)
+ rm -f -- $(LIBOBJ) $(LIBFILE) $(ARFILE) $(MAINS:=.o) $(MAINS) $(PCFILE)
rm -rf .deps
+.PHONY: install-shared
+install-shared: $(LIBFILE)
+ install -d $(DESTDIR)$(PREFIX)/$(LIBDIR) || true
+ install -m 0644 $< $(DESTDIR)$(PREFIX)/$(LIBDIR)/$(REAL_NAME)
+ rm -f $(DESTDIR)$(PREFIX)/$(LIBDIR)/$(SO_NAME)
+ ln -s $(REAL_NAME) $(DESTDIR)$(PREFIX)/$(LIBDIR)/$(SO_NAME)
+ rm -f $(DESTDIR)$(PREFIX)/$(LIBDIR)/$(LIBFILE)
+ ln -s $(SO_NAME) $(DESTDIR)$(PREFIX)/$(LIBDIR)/$(LIBFILE)
+
+.PHONY: install-static
+install-static: $(ARFILE)
+ install -d $(DESTDIR)$(PREFIX)/$(LIBDIR) || true
+ install -m 0644 $< $(DESTDIR)$(PREFIX)/$(LIBDIR)/$(ARLIB)
+
+.PHONY: install-header
+install-header: $(HEADERS) $(PCFILE)
+ install -d $(DESTDIR)$(PREFIX)/$(INCLUDEDIR) || true
+ install -m 0644 $(HEADERS) $(DESTDIR)$(PREFIX)/$(INCLUDEDIR)/
+ install -d $(DESTDIR)$(PREFIX)/$(LIBDIR)/pkgconfig || true
+ install -m 0644 $(PCFILE) $(DESTDIR)$(PREFIX)/$(LIBDIR)/pkgconfig
+
+.PHONY: install
+install: install-shared install-static install-header
+
# Executable files
%: %.o $(LIBFILE)
- $(CXX) $(CXXFLAGS) -o $@ $< -L . -l $(LIB)
+ $(CXX) $(CPPFLAGS) $(CXXFLAGS) -o $@ $< -L . -l $(LIB) $(LDFLAGS)
# The library
$(LIBFILE): $(LIBOBJ)
+ $(CXX) -shared -Wl,-soname,$(SO_NAME) $(LDFLAGS) -o $@ $^
+
+$(ARFILE): $(LIBOBJ)
$(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}
--
2.30.0
|