@@ -8,34 +8,43 @@ GCHECK_OBJECTS=$(GCHECK_SOURCES:cpp=o)
8
8
SOURCES=$(GCHECK_SOURCES:% =src/%)
9
9
HEADERS=$(GCHECK_HEADERS:% =$(GCHECK_INCLUDE_DIR ) /%) src/console_writer.h
10
10
OBJECTS:=$(GCHECK_OBJECTS:% =build/%)
11
+ PIC_OBJECTS:=$(OBJECTS:o =pic.o)
12
+
13
+ LIBNAME =$(GCHECK_LIB_NAME )
11
14
12
15
CXXFLAGS = -std=c++17 -Wall -Wextra -pedantic -I$(GCHECK_INCLUDE_DIR ) -Isrc
13
16
14
17
ifeq ($(OS ) ,Windows_NT)
15
18
RM=del /f /q
16
- LIBNAME=$(GCHECK_LIB)
17
19
FixPath = $(subst /,\,$1)
18
20
else
19
21
RM=rm -f
20
- LIBNAME=lib$(GCHECK_LIB).a
21
22
FixPath = $1
22
23
endif
23
24
24
- .PHONY : clean all debug set-debug
25
+ .PHONY : clean all debug set-debug shared
25
26
26
27
all : $(GCHECK_LIB_DIR ) /$(LIBNAME )
27
28
28
29
debug : | set-debug $(GCHECK_LIB_DIR ) /$(LIBNAME )
29
30
31
+ shared : $(GCHECK_LIB_DIR ) /$(GCHECK_SHARED_LIB_NAME )
32
+
30
33
set-debug :
31
34
$(eval CXXFLAGS += -g)
32
35
33
36
build/% .o : src/% .cpp $(HEADERS ) | build
34
37
$(CXX ) $(CPPFLAGS ) $(CXXFLAGS ) -c $< -o $@
35
38
36
- $(GCHECK_LIB_DIR ) /$(LIBNAME ) : $(OBJECTS ) | $(GCHECK_LIB_DIR )
39
+ build/% .pic.o : src/% .cpp $(HEADERS ) | build
40
+ $(CXX ) -fPIC $(CPPFLAGS ) $(CXXFLAGS ) -c $< -o $@
41
+
42
+ $(GCHECK_LIB_DIR ) /$(LIBNAME ) : | $(OBJECTS ) $(GCHECK_LIB_DIR )
37
43
ar rcs $(call FixPath, $@ $(OBJECTS ) )
38
44
45
+ $(GCHECK_LIB_DIR ) /$(GCHECK_SHARED_LIB_NAME ) : $(PIC_OBJECTS ) | $(GCHECK_LIB_DIR )
46
+ $(CXX ) -shared $(CPPFLAGS ) $(CXXFLAGS ) $(PIC_OBJECTS ) -o $@
47
+
39
48
get-report : $(EXECUTABLE )
40
49
$(call FixPath, ./$(EXECUTABLE ) ) --json 2>&1
41
50
0 commit comments