Makefile
changeset 57 527d23bf6441
parent 56 9dfc861273e5
child 58 02e539965ef4
equal deleted inserted replaced
56:9dfc861273e5 57:527d23bf6441
     1 LIBEVENT_PATH = ../libs/libevent-dev
       
     2 LIBFUSE_PATH = ../libs/libfuse-2.7.4
       
     3 
       
     4 LIBRARY_PATHS = -L${LIBEVENT_PATH}/lib -L${LIBFUSE_PATH}/lib
       
     5 INCLUDE_PATHS = -I${LIBEVENT_PATH}/include -I${LIBFUSE_PATH}/include
       
     6 LDLIBS = -levent -lfuse -lpq
       
     7 
       
     8 # default is test
       
     9 ifndef MODE
       
    10 MODE = test
       
    11 endif
       
    12 
       
    13 ifeq ($(MODE), debug)
       
    14 MODE_CFLAGS = -g -DDEBUG_ENABLED
       
    15 else ifeq ($(MODE), dev)
       
    16 MODE_CFLAGS = -g
       
    17 else ifeq ($(MODE), test)
       
    18 MODE_CFLAGS = -g -DINFO_DISABLED
       
    19 else ifeq ($(MODE), release)
       
    20 MODE_CFLAGS = -DINFO_DISABLED -O2
       
    21 endif
       
    22 
       
    23 # XXX: ugh... use `pkg-config fuse`
       
    24 DEFINES = -D_FILE_OFFSET_BITS=64
       
    25 FIXED_CFLAGS = -Wall -std=gnu99
       
    26 
       
    27 BIN_NAMES = helloworld hello simple_hello evpq_test url_test dbfs
       
    28 BIN_PATHS = $(addprefix bin/,$(BIN_NAMES))
       
    29 
       
    30 # modules
       
    31 module_objs = $(patsubst src/%.c,obj/%.o,$(wildcard src/$(1)/*.c))
       
    32 
       
    33 # complex modules
       
    34 EVSQL_OBJS = $(call module_objs,evsql) obj/evpq.o
       
    35 DBFS_OBJS = $(call module_objs,dbfs) obj/dirbuf.o 
       
    36 
       
    37 # first target
       
    38 all: ${BIN_PATHS}
       
    39 
       
    40 # binaries
       
    41 bin/helloworld: 
       
    42 bin/hello: obj/evfuse.o obj/dirbuf.o obj/lib/log.o obj/lib/signals.o
       
    43 bin/simple_hello: obj/evfuse.o obj/dirbuf.o obj/lib/log.o obj/lib/signals.o obj/simple.o
       
    44 bin/evpq_test: obj/evpq.o obj/lib/log.o
       
    45 bin/url_test: obj/lib/url.o obj/lib/lex.o obj/lib/log.o
       
    46 bin/dbfs: ${DBFS_OBJS} ${EVSQL_OBJS} obj/evfuse.o obj/lib/log.o obj/lib/signals.o
       
    47 
       
    48 # computed
       
    49 LDFLAGS = ${LIBRARY_PATHS}
       
    50 
       
    51 CPPFLAGS = ${INCLUDE_PATHS} ${DEFINES}
       
    52 CFLAGS = ${MODE_CFLAGS} ${FIXED_CFLAGS}
       
    53 
       
    54 SRC_PATHS = $(wildcard src/*.c) $(wildcard src/*/*.c)
       
    55 SRC_NAMES = $(patsubst src/%,%,$(SRC_PATHS))
       
    56 SRC_DIRS = $(dir $(SRC_NAMES))
       
    57 
       
    58 # other targets
       
    59 clean :
       
    60 	-rm obj/*.o obj/*/*.o
       
    61 	-rm bin/* 
       
    62 	-rm build/deps/*.d build/deps/*/*.d
       
    63 
       
    64 clean-deps:
       
    65 	-rm build/deps/*/*.d 
       
    66 	-rm build/deps/*.d
       
    67 
       
    68 #obj-dirs: 
       
    69 #	python build/make_obj_dirs.py $(BIN_PATHS)
       
    70 
       
    71 build/deps/%.d : src/%.c
       
    72 	@set -e; rm -f $@; \
       
    73 	 $(CC) -MM -MT __ $(CPPFLAGS) $< > $@.$$$$; \
       
    74 	 sed 's,__[ :]*,obj/$*.o $@ : ,g' < $@.$$$$ > $@; \
       
    75 	 rm -f $@.$$$$
       
    76 
       
    77 include $(SRC_NAMES:%.c=build/deps/%.d)
       
    78 
       
    79 obj/%.o : src/%.c
       
    80 	$(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@
       
    81 
       
    82 bin/% : obj/%.o
       
    83 	$(CC) $(LDFLAGS) $+ $(LOADLIBES) $(LDLIBS) -o $@
       
    84