blob: a708ec86d5e28c6b450e703af6a88c3e3be9c581 (
plain)
1 --- cpp/Makefile.orig 2021-08-08 17:21:08 UTC
2 +++ cpp/Makefile
3 @@ -29,11 +29,13 @@
4 # - CXXFLAGS: Any extra user-specified compiler flags (can be blank).
5
6 # Recommended compiler flags:
7 -CXXFLAGS += -std=c++11 -O
8 +CXXFLAGS ?= -std=c++11 -O
9
10 # Extra flags for diagnostics:
11 # CXXFLAGS += -g -Wall -Wextra -Wpedantic -Wconversion -Wsign-conversion -fsanitize=undefined,address
12
13 +# Version information
14 +VERSION = 1.7.0
15
16 # ---- Controlling make ----
17
18 @@ -51,29 +53,59 @@ CXXFLAGS += -std=c++11 -O
19 # ---- Targets to build ----
20
21 LIB = qrcodegencpp
22 -LIBFILE = lib$(LIB).a
23 +ARFILE = lib$(LIB).a
24 +LIBFILE = lib$(LIB).so
25 +# Bump the soname number when the ABI changes and gets incompatible
26 +SO_NAME = $(LIBFILE).1
27 +REAL_NAME = $(LIBFILE).$(VERSION)
28 +HEADERS = qrcodegen.hpp
29 LIBOBJ = qrcodegen.o
30 MAINS = QrCodeGeneratorDemo
31
32 +# define paths to install
33 +INCLUDEDIR ?= $(DESTDIR)$(PREFIX)/include/qrcodegen
34 +LIBDIR ?= $(DESTDIR)$(PREFIX)/lib
35 +
36 # Build all binaries
37 -all: $(LIBFILE) $(MAINS)
38 +all: $(LIBFILE) $(ARFILE) $(MAINS)
39
40 # Delete build output
41 clean:
42 - rm -f -- $(LIBOBJ) $(LIBFILE) $(MAINS:=.o) $(MAINS)
43 + rm -f -- $(LIBOBJ) $(LIBFILE) $(ARFILE) $(MAINS:=.o) $(MAINS)
44 rm -rf .deps
45
46 +install-shared: $(LIBFILE)
47 + install -d $(LIBDIR) || true
48 + install -m 0644 $(LIBFILE) $(LIBDIR)/$(REAL_NAME)
49 + rm -f $(LIBDIR)/$(SO_NAME)
50 + ln -s $(REAL_NAME) $(LIBDIR)/$(SO_NAME)
51 + rm -f $(LIBDIR)/$(LIBFILE)
52 + ln -s $(SO_NAME) $(LIBDIR)/$(LIBFILE)
53 +
54 +install-static: $(ARFILE)
55 + install -d $(LIBDIR) || true
56 + install -m 0644 $(ARFILE) $(LIBDIR)/$(ARFILE)
57 +
58 +install-header: $(HEADERS)
59 + install -d $(INCLUDEDIR) || true
60 + install -m 0644 $(HEADERS) $(INCLUDEDIR)/
61 +
62 +install: install-shared install-static install-header
63 +
64 # Executable files
65 %: %.o $(LIBFILE)
66 $(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $< -L . -l $(LIB)
67
68 # The library
69 -$(LIBFILE): $(LIBOBJ)
70 +$(ARFILE): $(LIBOBJ)
71 $(AR) -crs $@ -- $^
72
73 +$(LIBFILE): $(LIBOBJ)
74 + $(CC) -shared -Wl,-soname,$(SO_NAME) $(LDFLAGS) -o $@ $^
75 +
76 # Object files
77 %.o: %.cpp .deps/timestamp
78 - $(CXX) $(CXXFLAGS) -c -o $@ -MMD -MF .deps/$*.d $<
79 + $(CXX) $(CXXFLAGS) -fPIC -c -o $@ -MMD -MF .deps/$*.d $<
80
81 # Have a place to store header dependencies automatically generated by compiler
82 .deps/timestamp:
83
84
85 [FILE:142:files/Makefile]
86 SUBDIRS= c cpp
87
88 TARGETS= all clean install
89
90 .PHONY: $(TARGETS) $(SUBDIRS)
91
92 $(TARGETS): $(SUBDIRS)
93
94 $(SUBDIRS):
95 $(MAKE) -C $@ $(MAKECMDGOALS)
|