Use pkg-config
[centaur.git] / Makefile
1 PROJ := elfedit
2
3 LIBRARIES := libelf
4
5 BUILDDIR   := build
6 INCLUDEDIR := include
7 SRCDIR     := src
8
9 EXE     := $(BUILDDIR)/$(PROJ)
10 HEADERS := $(shell find $(INCLUDEDIR)/ -iname "*.h")
11 HEADERS += $(shell find $(SRCDIR)/ -iname "*.h")
12
13 SOURCES := $(shell find $(SRCDIR)/ -iname "*.c")
14 OBJS    := $(patsubst %.c, $(BUILDDIR)/%.o, $(SOURCES))
15
16 INCLUDES := $(patsubst %, -I%, $(INCLUDEDIR) $(SRCDIR)) $(shell pkg-config --cflags-only-I $(LIBRARIES))
17 CFLAGS   := -g -Wall $(shell pkg-config --cflags-only-other $(LIBRARIES))
18 LDFLAGS  := $(shell pkg-config --libs $(LIBRARIES))
19
20
21
22 .PHONY: default
23 default: $(EXE)
24
25
26 .PHONY: check
27 check: $(EXE)
28         $(EXE) $(EXE) -o testexe
29         @cmp $(EXE) testexe
30         @rm testexe
31         @echo "Check successful."
32
33
34 .PHONY: debug
35 debug: $(EXE)
36         gdb $(EXE) $(shell ps -e | sed "s/^ *\([0-9]\+\) .*$(PROJ).*$$/\1/g;te;d;:e")
37
38
39 $(EXE): $(OBJS)
40         @if [ ! -d $(BUILDDIR) ] ; then echo "Error: Build dir '$(BUILDDIR)' does not exist." ; false ; fi
41         gcc -o $@ $^ $(LDFLAGS)
42
43
44 $(BUILDDIR)/$(SRCDIR)/%.o: $(SRCDIR)/%.c $(HEADERS)
45         @if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@) ; fi
46         gcc $(INCLUDES) $(CFLAGS) -c -o $@ $<
47
48
49 .PHONY: clean
50 clean:
51         rm -f $(STATICLIB)
52         rm -f $(OBJS)
53         rm -f $(TESTEXES)
54         rm -rf $(BUILDDIR)/
55
56
57 .PHONY: distclean
58 distclean: clean
59         find . -xdev -name "*~" -exec rm {} \;
60         find . -xdev -name "core" -exec rm {} \;