-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
69 lines (57 loc) · 2.18 KB
/
Makefile
File metadata and controls
69 lines (57 loc) · 2.18 KB
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
# Lesson 23: pkg-config and Third-Party Libraries
#
# pkg-config provides the correct compiler and linker flags for installed
# libraries. Instead of hardcoding -I and -L paths, you ask pkg-config:
#
# pkg-config --cflags zlib → (include paths, if any)
# pkg-config --libs zlib → -lz
#
# This is how real Makefiles integrate with OpenSSL, zlib, SDL2, libpng, etc.
CXX = g++
CXXFLAGS = -std=c++20 -Wall -Wextra -Iinclude -MMD -MP
LDFLAGS =
BUILDDIR = build
# ── pkg-config integration ──────────────────────────────
# Try pkg-config first; fall back to plain -lz if unavailable
HAVE_PKGCONFIG := $(shell pkg-config --exists zlib 2>/dev/null && echo yes)
ifeq ($(HAVE_PKGCONFIG),yes)
ZLIB_CFLAGS := $(shell pkg-config --cflags zlib)
ZLIB_LIBS := $(shell pkg-config --libs zlib)
else
# Fallback: zlib is commonly available without pkg-config
$(info pkg-config not found or zlib.pc missing — using fallback flags)
ZLIB_CFLAGS :=
ZLIB_LIBS := -lz
endif
CXXFLAGS += $(ZLIB_CFLAGS)
LDFLAGS += $(ZLIB_LIBS)
SRCS = $(wildcard src/*.cpp)
OBJS = $(patsubst %.cpp,$(BUILDDIR)/%.o,$(SRCS))
DEPS = $(OBJS:.o=.d)
TARGET = $(BUILDDIR)/app
.PHONY: all clean check-deps
all: $(TARGET)
$(TARGET): $(OBJS)
@mkdir -p $(@D)
$(CXX) -o $@ $^ $(LDFLAGS)
$(BUILDDIR)/%.o: %.cpp
@mkdir -p $(@D)
$(CXX) $(CXXFLAGS) -c -o $@ $<
clean:
rm -rf $(BUILDDIR)
# ── Dependency check ────────────────────────────────────
check-deps:
@echo "Checking for zlib..."
@if pkg-config --exists zlib 2>/dev/null; then \
echo " zlib found via pkg-config:"; \
echo " cflags: $$(pkg-config --cflags zlib)"; \
echo " libs: $$(pkg-config --libs zlib)"; \
echo " version: $$(pkg-config --modversion zlib)"; \
else \
echo " pkg-config: zlib.pc not found"; \
echo " Trying fallback: checking for -lz..."; \
echo 'int main(){}' | $(CXX) -x c++ - -lz -o /dev/null 2>/dev/null \
&& echo " -lz works (zlib available without pkg-config)" \
|| echo " ERROR: zlib not found — install zlib development package"; \
fi
-include $(DEPS)