зеркало из
https://github.com/TigerVNC/tigervnc.git
synced 2024-07-30 20:20:56 +02:00
0bb538bf85
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@602 3789f03b-4d11-0410-bbf8-ca57d06f2519
77 строки
2.4 KiB
Makefile
77 строки
2.4 KiB
Makefile
#
|
|
# C / C++ header dependency stuff
|
|
#
|
|
# Needs GNU make and vncmkdepend, a hacked version of makedepend
|
|
|
|
.SUFFIXES: .d
|
|
|
|
CMAKEDEPEND = vncmkdepend
|
|
CXXMAKEDEPEND = vncmkdepend
|
|
|
|
#
|
|
# The recommended method of doing dependency analysis in the GNU make manual
|
|
# turns out to be painfully slow. This method is similar but it's
|
|
# substantially faster and retains the desirable property that the user doesn't
|
|
# need to manually invoke a "make depend" step.
|
|
#
|
|
# As with the method described in the manual, we generate a separate dependency
|
|
# (.d) file for each source file. The .d file records the header files that
|
|
# each C or C++ source file includes. Any source file recorded in SRCS or
|
|
# CXXSRCS will cause us to try and include the corresponding .d file and GNU
|
|
# make then treats each .d file as a target to be remade.
|
|
#
|
|
# Unlike the manual's method, the rule we provide for making the .d file is
|
|
# actually a fake. All it does is record in a temporary file that the .d file
|
|
# needs to be remade. But as well as all the .d files, we also try to include
|
|
# a file called "depend.phony". This file never exists, but it causes GNU make
|
|
# to try and make the target "depend.phony". The rule for depend.phony then
|
|
# looks at the temporary files generated by the .d rules and then invokes the
|
|
# "omkdepend" program on all of the source files in one go.
|
|
#
|
|
|
|
#
|
|
# We use simple assignment here to remove any of the depend.tmp files
|
|
# at the time make parses this bit.
|
|
#
|
|
|
|
dummyvariable := $(shell $(RM) cdepend.tmp cxxdepend.tmp)
|
|
|
|
#
|
|
# Now the "fake" rules for generating .d files.
|
|
#
|
|
|
|
%.d: %.c
|
|
@echo "$<" >> cdepend.tmp
|
|
|
|
%.d: %.cxx
|
|
@echo "$<" >> cxxdepend.tmp
|
|
|
|
#
|
|
# The depend.phony rule which actually runs omkdepend.
|
|
#
|
|
|
|
depend.phony:
|
|
@if [ -f cdepend.tmp ]; then \
|
|
echo $(CMAKEDEPEND) $(ALL_CPPFLAGS) `cat cdepend.tmp`; \
|
|
$(CMAKEDEPEND) $(ALL_CPPFLAGS) `cat cdepend.tmp`; \
|
|
rm -f cdepend.tmp; \
|
|
fi; \
|
|
if [ -f cxxdepend.tmp ]; then \
|
|
echo $(CXXMAKEDEPEND) $(ALL_CPPFLAGS) `cat cxxdepend.tmp`; \
|
|
$(CXXMAKEDEPEND) $(ALL_CPPFLAGS) `cat cxxdepend.tmp`; \
|
|
rm -f cxxdepend.tmp; \
|
|
fi
|
|
|
|
#
|
|
# Now include the .d files and the "depend.phony" file which never exists.
|
|
# For some reason GNU make evaluates the targets in reverse order, so we need
|
|
# to include depend.phony first. The "-" tells make not to complain that it
|
|
# can't find the file.
|
|
#
|
|
|
|
-include depend.phony
|
|
|
|
ifdef SRCS
|
|
-include $(patsubst %.c,%.d,$(patsubst %.cxx,%.d,$(SRCS)))
|
|
endif
|