notmuch/Makefile
Carl Worth 5f5e9b8662 Makefile: Fix dependency generation for files in sub-directories.
Otherwise, things in the lib sub-directory weren't getting recompiled
even when lib/notmuch.h was changed.

The original rule we were using came from the GNU Makefile manual, but
only handled files in the current directory, not file in
sub-directories as we use here with our non-recursive Makefile.

So the .deps files being created were being put in the right place,
(such as .deps/lib/database.d), but the compiler was generating a
dependency for "database.o" rather than "lib/database.o" like we
want. We were already trying to do a sed job on that name to add a
dependency for the .d file as well. But the sed job was failing since
the expected pattern wasn't there, (the directory name was missing).

So the fix is simply to use basename to construct the search pattern,
and then use the name with the directory in the replacement (rather
than the back-reference).
2009-11-12 22:24:55 -08:00

44 lines
1.3 KiB
Makefile

# Default FLAGS, (can be overriden by user such as "make CFLAGS=-O2")
WARN_FLAGS=-Wall -Wextra -Wmissing-declarations -Wwrite-strings -Wswitch-enum
CFLAGS=-O2
# Additional flags that we will append to whatever the user set.
# These aren't intended for the user to manipulate.
extra_cflags = `pkg-config --cflags glib-2.0 gmime-2.4 talloc`
extra_cxxflags = `xapian-config --cxxflags`
# Now smash together user's values with our extra values
override CFLAGS += $(WARN_FLAGS) $(extra_cflags)
override CXXFLAGS += $(WARN_FLAGS) $(extra_cflags) $(extra_cxxflags)
override LDFLAGS += `pkg-config --libs glib-2.0 gmime-2.4 talloc` \
`xapian-config --libs`
# Include our local Makfile.local first so that its first target is default
include Makefile.local
include lib/Makefile.local
%.o: %.cc
$(CXX) -c $(CFLAGS) $(CXXFLAGS) $< -o $@
%.o: %.c
$(CC) -c $(CFLAGS) $< -o $@
.deps/%.d: %.c
@set -e; rm -f $@; mkdir -p $$(dirname $@) ; \
$(CC) -M $(CPPFLAGS) $(CFLAGS) $< > $@.$$$$; \
sed 's,'$$(basename $*)'\.o[ :]*,$*.o $@ : ,g' < $@.$$$$ > $@; \
rm -f $@.$$$$
.deps/%.d: %.cc
@set -e; rm -f $@; mkdir -p $$(dirname $@) ; \
$(CXX) -M $(CPPFLAGS) $(CXXFLAGS) $< > $@.$$$$; \
sed 's,'$$(basename $*)'\.o[ :]*,$*.o $@ : ,g' < $@.$$$$ > $@; \
rm -f $@.$$$$
DEPS := $(SRCS:%.c=.deps/%.d)
DEPS := $(DEPS:%.cc=.deps/%.d)
-include $(DEPS)
clean:
rm -f $(CLEAN); rm -rf .deps