Makefile

changeset 0
8bf1bf91a36d
child 3
916a2c764bde
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/Makefile	Sat Nov 27 01:13:12 2010 +0000
     1.3 @@ -0,0 +1,454 @@
     1.4 +# Phil's multiplatform makefile template
     1.5 +# With auto-incrementing build number and automatic version.h generation
     1.6 +# Version 1.8, 2010-02-15
     1.7 +#
     1.8 +# The latest version of this Makefile can be found at http://www.philpem.me.uk/
     1.9 +#
    1.10 +#
    1.11 +# Copyright (c) 2010 Philip Pemberton <code@philpem.me.uk>
    1.12 +#
    1.13 +# Permission is hereby granted, free of charge, to any person obtaining a copy
    1.14 +# of this software and associated documentation files (the "Software"), to deal
    1.15 +# in the Software without restriction, including without limitation the rights
    1.16 +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    1.17 +# copies of the Software, and to permit persons to whom the Software is
    1.18 +# furnished to do so, subject to the following conditions:
    1.19 +#
    1.20 +# The above copyright notice and this permission notice shall be included in
    1.21 +# all copies or substantial portions of the Software.
    1.22 +#
    1.23 +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    1.24 +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    1.25 +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    1.26 +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    1.27 +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    1.28 +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    1.29 +# THE SOFTWARE.
    1.30 +#
    1.31 +#
    1.32 +# Instructions for use:
    1.33 +#   Run 'make init' to create the required directories
    1.34 +#   Add your source files to the 'SOURCES' list, and change the TARGET filename
    1.35 +#   Set the desired build type and platform in the BUILD_TYPE and PLATFORM
    1.36 +#     variables respectively
    1.37 +#   Set your project type (C only, or C++) in the SRC_TYPE variable
    1.38 +#   Add any libraries you need to link against to the 'LIB' list
    1.39 +#   Run 'make'
    1.40 +#
    1.41 +# Object files are created in the 'obj' subdirectory, from source code in the
    1.42 +# 'src' directory. Dependency files are created in the 'dep' directory from
    1.43 +# the same source code the object files are created from.
    1.44 +#
    1.45 +# Supported targets are:
    1.46 +#   all                 Build everything.
    1.47 +#   update-revision     Increment the build number without building anything.
    1.48 +#   clean-versioninfo   Delete src/version.h (will be rebuilt on the next
    1.49 +#                       'make all').
    1.50 +#   init                Initialise the build system for a new project.
    1.51 +#                       WARNING: overwrites .buildnum and src/version.h.in!
    1.52 +#   cleandep            Delete all dependency files.
    1.53 +#   clean               Delete all dependency, intermediate and target files.
    1.54 +#   tidy                Delete all dependency and intermediate files, leaving
    1.55 +#                       the target file intact.
    1.56 +#
    1.57 +# If you want to reset the build number to zero, delete '.buildnum'. This
    1.58 +# should be done whenever the major or minor version changes. Excluding
    1.59 +# .buildnum from version control may also be a good idea, depending on how
    1.60 +# you want your build numbers to work.
    1.61 +#
    1.62 +# The BUILD_TYPE variable contains the current build type. There are two
    1.63 +# supported build types:
    1.64 +#   debug       Debug mode - object files are compiled with debug information
    1.65 +#               and the target is left unstripped.
    1.66 +#   release     Release mode - object files are not compiled with debug info,
    1.67 +#               and the target is fed through strip to remove redundant
    1.68 +#               data.
    1.69 +#
    1.70 +# The PLATFORM variable contains the current target platform. There are two
    1.71 +# supported platforms:
    1.72 +#   linux       GNU/Linux with GNU Compiler Collection
    1.73 +#   win32       Windows 32-bit with MinGW
    1.74 +#
    1.75 +# The EXTSRC variable is used to specify other files to build. It is typically
    1.76 +# used to specify platform or build-type specific source files, e.g.
    1.77 +#
    1.78 +# ifeq ($(BUILD_TYPE),debug-memwatch)
    1.79 +#   CFLAGS += -g -ggdb
    1.80 +#   CPPFLAGS += -DMEMWATCH
    1.81 +#   INCPATH += ./memwatch
    1.82 +#   EXTSRC += memwatch/memwatch.c
    1.83 +# endif
    1.84 +#
    1.85 +# (example taken from one of my projects that allowed the use of Memwatch to
    1.86 +#  track down memory allocation/deallocation bugs)
    1.87 +#
    1.88 +#
    1.89 +# Change history:
    1.90 +#   1.8 - Now supports the use of the wxWidgets GUI framework. To turn
    1.91 +#         this on, set ENABLE_WX to "yes".
    1.92 +#   1.7 - Now creates a basic Hgignore file and directory keepers for the
    1.93 +#         dep and obj directories.
    1.94 +#   1.6 - Added CFLAGS and CXXFLAGS to the command-lines for the dependency
    1.95 +#         building commands. This was causing issues with C99 / C++0x mode.
    1.96 +#   1.5 - Added support for Mercurial revision (changeset ID) display
    1.97 +#         Fixed a few issues with Subversion support (svn: and version 0 would
    1.98 +#         be displayed for exported code)
    1.99 +#
   1.100 +
   1.101 +####
   1.102 +# Build configuration
   1.103 +####
   1.104 +
   1.105 +# version information -- major.minor.extra
   1.106 +# note that VER_EXTRA can be overridden on the command line, e.g.:
   1.107 +# make VER_EXTRA=12345 all
   1.108 +VER_MAJOR	= 0
   1.109 +VER_MINOR	= 0
   1.110 +VER_EXTRA	?= 
   1.111 +
   1.112 +# build platform: win32 or linux
   1.113 +PLATFORM	?=	linux
   1.114 +# build type: release or debug
   1.115 +BUILD_TYPE	?=	debug
   1.116 +
   1.117 +# target executable
   1.118 +TARGET		=	3b1emu
   1.119 +
   1.120 +# source files that produce object files
   1.121 +SRC			=	main.c musashi/m68kcpu.c musashi/m68kops.c
   1.122 +
   1.123 +# source type - either "c" or "cpp" (C or C++)
   1.124 +SRC_TYPE	=	c
   1.125 +
   1.126 +# additional object files that don't necessarily include source
   1.127 +EXT_OBJ		=
   1.128 +# libraries to link in -- these will be specified as "-l" parameters, the -l
   1.129 +# is prepended automatically
   1.130 +LIB			=	sdl
   1.131 +# library paths -- where to search for the above libraries
   1.132 +LIBPATH		=	musashi
   1.133 +# include paths -- where to search for #include files (in addition to the
   1.134 +# standard paths
   1.135 +INCPATH		=	musashi
   1.136 +# garbage files that should be deleted on a 'make clean' or 'make tidy'
   1.137 +GARBAGE		=	obj/musashi/m68kmake obj/musashi/m68kmake.exe obj/musashi/m68kmake.o
   1.138 +
   1.139 +# extra dependencies - files that we don't necessarily know how to build, but
   1.140 +# that are required for building the application; e.g. object files or
   1.141 +# libraries in sub or parent directories
   1.142 +EXTDEP		=
   1.143 +
   1.144 +# Extra libraries
   1.145 +# wxWidgets: set to "yes" to enable, anything else to disable
   1.146 +ENABLE_WX	=	no
   1.147 +# wxWidgets: list of wxWidgets libraries to enable
   1.148 +WX_LIBS		=	std
   1.149 +
   1.150 +####
   1.151 +# Win32 target-specific settings
   1.152 +####
   1.153 +ifeq ($(strip $(PLATFORM)),win32)
   1.154 +	# windows executables have a .exe suffix
   1.155 +	TARGET := $(addsuffix .exe,$(TARGET))
   1.156 +	# console mode application
   1.157 +	EXT_CFLAGS = -mconsole
   1.158 +endif
   1.159 +
   1.160 +
   1.161 +####
   1.162 +# Tool setup
   1.163 +####
   1.164 +MAKE	=	make
   1.165 +CC		=	gcc
   1.166 +CXX		=	g++
   1.167 +CFLAGS	=	-Wall -pedantic -std=gnu99 $(EXT_CFLAGS)
   1.168 +CXXFLAGS=	-Wall -pedantic -std=gnu++0x $(EXT_CXXFLAGS)
   1.169 +LDFLAGS	=	$(EXT_LDFLAGS)
   1.170 +RM		=	rm
   1.171 +STRIP	=	strip
   1.172 +
   1.173 +###############################################################################
   1.174 +# You should not need to touch anything below here, unless you're adding a new
   1.175 +# platform or build type (or changing the version string format)
   1.176 +###############################################################################
   1.177 +
   1.178 +####
   1.179 +# A quick sanity check on the platform type
   1.180 +####
   1.181 +ifneq ($(PLATFORM),linux)
   1.182 +ifneq ($(PLATFORM),win32)
   1.183 +    $(error Platform '$(PLATFORM)' not supported. Supported platforms are: linux, win32)
   1.184 +endif
   1.185 +endif
   1.186 +
   1.187 +####
   1.188 +# Version info generation
   1.189 +####
   1.190 +# get the current build number
   1.191 +VER_BUILDNUM	= $(shell cat .buildnum)
   1.192 +
   1.193 +#### --- begin Subversion revision grabber ---
   1.194 +# there are two ways to get the SVN revision - use svnversion, or use svn info
   1.195 +# then pipe through awk. which one you use is up to you.
   1.196 +VER_SVNREV		= $(shell LANG=C svn info 2>/dev/null || echo 'Revision: exported' | awk '/^Revision:/ { print$$2 }' )
   1.197 +#VER_SVNREV		= $(shell svnversion .)
   1.198 +
   1.199 +# if the version string is "exported", then the CSD was not checked out of SVN
   1.200 +# note that if the CSD is not an SVN checkout, then @@svnrev@@ will be set to
   1.201 +# zero.
   1.202 +ifeq ($(VER_SVNREV),exported)
   1.203 +    VER_VCS		= none
   1.204 +    VER_VCSREV	= 0
   1.205 +else
   1.206 +    VER_VCS		= svn
   1.207 +    VER_VCSREV	= $(VER_SVNREV)
   1.208 +endif
   1.209 +
   1.210 +#### --- begin Mercurial revision grabber ---
   1.211 +# If SVN didn't give us a revision, try Mercurial instead
   1.212 +ifeq ($(VER_VCS),none)
   1.213 +    # get the current Mercurial changeset number
   1.214 +	VER_HGREV=$(shell ((hg tip --template "{node|short}") || echo "000000000000") 2>/dev/null)
   1.215 +    ifneq ($(VER_HGREV),000000000000)
   1.216 +        # a non-empty repo
   1.217 +        VER_VCS		= hg
   1.218 +        VER_VCSREV	= $(VER_HGREV)
   1.219 +    else
   1.220 +        # either an empty Hg repo, or no repo at all
   1.221 +        VER_VCS		= none
   1.222 +        VER_VCSREV	= 0
   1.223 +    endif
   1.224 +endif
   1.225 +
   1.226 +#### --- end version grabbers ---
   1.227 +
   1.228 +# start creating the revision string
   1.229 +VER_FULLSTR		= $(VER_MAJOR).$(VER_MINOR).$(VER_BUILDNUM)$(VER_EXTRA)
   1.230 +
   1.231 +# if this is a VCS release, include the SVN revision in the version string
   1.232 +# also create a revision string that is either "svn:12345", "hg:12345" or
   1.233 +# blank
   1.234 +ifneq ($(VER_VCS),none)
   1.235 +    VER_FULLSTR	+= ($(VER_VCS) $(VER_VCSREV))
   1.236 +    VER_VCSSTR	= $(VER_VCS):$(VER_VCSREV)
   1.237 +else
   1.238 +    VER_VCSSTR	=
   1.239 +endif
   1.240 +
   1.241 +
   1.242 +####
   1.243 +# Build-type specific configuration
   1.244 +####
   1.245 +ifeq ($(BUILD_TYPE),debug)
   1.246 +	CFLAGS		+= -g -ggdb -DDEBUG
   1.247 +	CXXFLAGS	+= -g -ggdb -DDEBUG
   1.248 +else
   1.249 + ifeq ($(BUILD_TYPE),release)
   1.250 +	CFLAGS		+= -O2
   1.251 +	CXXFLAGS	+= -O2
   1.252 + else
   1.253 + 	$(error Unsupported build type: '$(BUILD_TYPE)')
   1.254 + endif
   1.255 +endif
   1.256 +
   1.257 +####
   1.258 +# wxWidgets support
   1.259 +####
   1.260 +ifeq ($(ENABLE_WX),yes)
   1.261 +	ifeq ($(BUILD_TYPE),debug)
   1.262 +		LIBLNK		+=	`wx-config --debug --libs $(WX_LIBS)`
   1.263 +		CFLAGS		+=	`wx-config --debug --cflags $(WX_LIBS)`
   1.264 +		CXXFLAGS	+=	`wx-config --debug --cxxflags $(WX_LIBS)`
   1.265 +		CPPFLAGS	+=	`wx-config --debug --cppflags $(WX_LIBS)`
   1.266 +	else
   1.267 +		ifeq ($(BUILD_TYPE),release)
   1.268 +			LIBLNK		+=	`wx-config --libs $(WX_LIBS)`
   1.269 +			CFLAGS		+=	`wx-config --cflags $(WX_LIBS)`
   1.270 +			CPPFLAGS	+=	`wx-config --cppflags $(WX_LIBS)`
   1.271 +			CXXFLAGS	+=	`wx-config --cxxflags $(WX_LIBS)`
   1.272 +		else
   1.273 +			$(error Unsupported build type: '$(BUILD_TYPE)')
   1.274 +		endif
   1.275 +	endif
   1.276 +endif
   1.277 +
   1.278 +####
   1.279 +# rules
   1.280 +####
   1.281 +
   1.282 +# object files
   1.283 +OBJ		=	$(addprefix obj/, $(addsuffix .o, $(basename $(SRC))) $(EXT_OBJ)) $(addsuffix .o, $(basename $(EXTSRC)))
   1.284 +
   1.285 +# dependency files
   1.286 +DEPFILES =	$(addprefix dep/, $(addsuffix .d, $(basename $(SRC))) $(EXT_OBJ)) $(addsuffix .d, $(basename $(EXTSRC)))
   1.287 +
   1.288 +# path commands
   1.289 +LIBLNK	+=	$(addprefix -l, $(LIB))
   1.290 +LIBPTH	+=	$(addprefix -L, $(LIBPATH))
   1.291 +INCPTH	+=	$(addprefix -I, $(INCPATH))
   1.292 +
   1.293 +CPPFLAGS +=	$(INCPTH)
   1.294 +
   1.295 +####
   1.296 +# Make sure there is at least one object file to be linked in
   1.297 +####
   1.298 +ifeq ($(strip $(OBJ)),)
   1.299 +    $(error Unable to build: no object or source files specified in Makefile)
   1.300 +endif
   1.301 +
   1.302 +####
   1.303 +# targets
   1.304 +####
   1.305 +.PHONY:	default all update-revision versionheader clean-versioninfo init cleandep clean tidy
   1.306 +
   1.307 +all:	update-revision
   1.308 +	@$(MAKE) versionheader
   1.309 +	$(MAKE) $(TARGET)
   1.310 +
   1.311 +# increment the current build number
   1.312 +NEWBUILD=$(shell expr $(VER_BUILDNUM) + 1)
   1.313 +update-revision:
   1.314 +	@echo $(NEWBUILD) > .buildnum
   1.315 +
   1.316 +versionheader:
   1.317 +	@sed -e 's/@@date@@/$(shell LC_ALL=C date)/g'			\
   1.318 +		 -e 's/@@time@@/$(shell LC_ALL=C date +%T)/g'		\
   1.319 +		 -e 's/@@whoami@@/$(shell whoami)/g'				\
   1.320 +		 -e 's/@@hostname@@/$(shell hostname)/g'			\
   1.321 +		 -e 's|@@compiler@@|$(shell $(CC) $(CFLAGS) -v 2>&1 | tail -n 1 | sed -e "s;|;/;")|g'	\
   1.322 +		 -e 's/@@majorver@@/$(VER_MAJOR)/g'					\
   1.323 +		 -e 's/@@minorver@@/$(VER_MINOR)/g'					\
   1.324 +		 -e 's/@@extraver@@/$(subst \",,$(VER_EXTRA))/g'	\
   1.325 +		 -e 's/@@buildnum@@/$(VER_BUILDNUM)/g'				\
   1.326 +		 -e 's/@@buildtype@@/$(BUILD_TYPE)/g'				\
   1.327 +		 -e 's/@@vcs@@/$(VER_VCS)/g'						\
   1.328 +		 -e 's/@@vcsrev@@/$(VER_VCSREV)/g'					\
   1.329 +		 -e 's/@@vcsstr@@/$(VER_VCSSTR)/g'					\
   1.330 +		 -e 's/@@fullverstr@@/$(VER_FULLSTR)/g'				\
   1.331 +		 -e 's/@@cflags@@/$(CFLAGS)/g'						\
   1.332 +		 < src/version.h.in > src/version.h
   1.333 +
   1.334 +# version.h creation stuff based on code from the Xen makefile
   1.335 +clean-versioninfo:
   1.336 +	@if [ ! -r src/version.h -o -O src/version.h ]; then \
   1.337 +		rm -f src/version.h; \
   1.338 +	fi
   1.339 +	@echo 0 > .buildnum
   1.340 +
   1.341 +# initialise the build system for a new project
   1.342 +init:
   1.343 +	@mkdir -p src dep obj
   1.344 +	@echo "This file is a directory-keeper. Do not delete it." > dep/.keepme
   1.345 +	@echo "This file is a directory-keeper. Do not delete it." > obj/.keepme
   1.346 +	@echo 0 > .buildnum
   1.347 +	@echo 'syntax: glob' > .hgignore
   1.348 +	@echo 'obj/*.o' >> .hgignore
   1.349 +	@echo 'dep/*.d' >> .hgignore
   1.350 +	@echo '*~' >> .hgignore
   1.351 +	@echo '.*.sw?' >> .hgignore
   1.352 +	@echo '#define VER_COMPILE_DATE	"@@date@@"'				> src/version.h.in
   1.353 +	@echo '#define VER_COMPILE_TIME	"@@time@@"'				>> src/version.h.in
   1.354 +	@echo '#define VER_COMPILE_BY		"@@whoami@@"'		>> src/version.h.in
   1.355 +	@echo '#define VER_COMPILE_HOST	"@@hostname@@"'			>> src/version.h.in
   1.356 +	@echo '#define VER_COMPILER		"@@compiler@@"'			>> src/version.h.in
   1.357 +	@echo '#define VER_BUILD_TYPE		"@@buildtype@@"'	>> src/version.h.in
   1.358 +	@echo '#define VER_CFLAGS			"@@cflags@@"'		>> src/version.h.in
   1.359 +	@echo ''												>> src/version.h.in
   1.360 +	@echo '#define VER_MAJOR			@@majorver@@'		>> src/version.h.in
   1.361 +	@echo '#define VER_MINOR			@@minorver@@'		>> src/version.h.in
   1.362 +	@echo '#define VER_BUILDNUM		@@buildnum@@'			>> src/version.h.in
   1.363 +	@echo '#define VER_EXTRA			"@@extraver@@"'		>> src/version.h.in
   1.364 +	@echo '#define VER_VCSREV			"@@vcsstr@@"'		>> src/version.h.in
   1.365 +	@echo ''												>> src/version.h.in
   1.366 +	@echo '#define VER_FULLSTR			"@@fullverstr@@"'	>> src/version.h.in
   1.367 +	@echo ''												>> src/version.h.in
   1.368 +	@echo Build system initialised
   1.369 +
   1.370 +# remove the dependency files
   1.371 +cleandep:
   1.372 +	-rm $(DEPFILES)
   1.373 +
   1.374 +# remove the dependency files and any target or intermediate build files
   1.375 +clean:	cleandep clean-versioninfo
   1.376 +	-rm $(OBJ) $(TARGET) $(GARBAGE)
   1.377 +
   1.378 +# remove any dependency or intermediate build files
   1.379 +tidy:	cleandep clean-versioninfo
   1.380 +	-rm $(OBJ) $(GARBAGE)
   1.381 +
   1.382 +#################################
   1.383 +
   1.384 +$(TARGET):	$(OBJ) $(EXTDEP)
   1.385 +ifeq ($(SRC_TYPE),c)
   1.386 +	$(CC) $(CXXFLAGS) $(LDFLAGS) $(OBJ) $(LIBPTH) $(LIBLNK) -o $@
   1.387 +else
   1.388 +	$(CXX) $(CXXFLAGS) $(LDFLAGS) $(OBJ) $(LIBPTH) $(LIBLNK) -o $@
   1.389 +endif
   1.390 +ifeq ($(BUILD_TYPE),release)
   1.391 +	$(STRIP) $(TARGET)
   1.392 +endif
   1.393 +
   1.394 +###
   1.395 +# extra rules
   1.396 +# example:
   1.397 +#src/parser.c:	src/parser.h
   1.398 +
   1.399 +
   1.400 +####
   1.401 +## musashi build rules
   1.402 +# 68k CPU builder
   1.403 +obj/musashi/m68kmake:	obj/musashi/m68kmake.o
   1.404 +	$(CC) $(CFLAGS) $(CPPFLAGS) obj/musashi/m68kmake.o -o $@
   1.405 +# 68k CPU sources
   1.406 +src/musashi/m68kops.h src/musashi/m68kops.c:	obj/musashi/m68kmake src/musashi/m68k_in.c
   1.407 +	./obj/musashi/m68kmake src/musashi src/musashi/m68k_in.c
   1.408 +
   1.409 +####
   1.410 +# make object files from C source files
   1.411 +obj/%.o:	src/%.c
   1.412 +	$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
   1.413 +
   1.414 +##
   1.415 +# make object files from C++ source files
   1.416 +obj/%.o:	src/%.cc
   1.417 +	$(CXX) -c $(CXXFLAGS) $(CPPFLAGS) $< -o $@
   1.418 +
   1.419 +obj/%.o:	src/%.cpp
   1.420 +	$(CXX) -c $(CXXFLAGS) $(CPPFLAGS) $< -o $@
   1.421 +
   1.422 +###
   1.423 +# make C files from yacc/bison source
   1.424 +src/%.h src/%.c:	src/%.y
   1.425 +	$(YACC) $(YFLAGS) -d $<
   1.426 +	mv -f y.tab.c $*.c
   1.427 +	mv -f y.tab.h $*.h
   1.428 +
   1.429 +###
   1.430 +# make C files from lex/flex source
   1.431 +src/%.c:	src/%.l
   1.432 +	$(LEX) $(LFLAGS) -o$@ $<
   1.433 +
   1.434 +###
   1.435 +# make dependencies for our source files
   1.436 +dep/%.d:	src/%.c
   1.437 +	$(CC) -MM $(CFLAGS) $(CPPFLAGS) $< > $@.$$$$; \
   1.438 +		sed 's,\($*\)\.o[ :]*,obj/\1.o $@ : ,g' < $@.$$$$ > $@; \
   1.439 +		rm -f $@.$$$$
   1.440 +
   1.441 +dep/%.d:	src/%.cpp
   1.442 +	$(CXX) -MM $(CXXFLAGS) $(CPPFLAGS) $< > $@.$$$$; \
   1.443 +		sed 's,\($*\)\.o[ :]*,obj/\1.o $@ : ,g' < $@.$$$$ > $@; \
   1.444 +		rm -f $@.$$$$
   1.445 +
   1.446 +dep/%.d:	src/%.cc
   1.447 +	$(CXX) -MM $(CXXFLAGS) $(CPPFLAGS) $< > $@.$$$$; \
   1.448 +		sed 's,\($*\)\.o[ :]*,obj/\1.o $@ : ,g' < $@.$$$$ > $@; \
   1.449 +		rm -f $@.$$$$
   1.450 +
   1.451 +####
   1.452 +# pull in the dependency files, but only for 'make $(TARGET)'
   1.453 +####
   1.454 +
   1.455 +ifeq ($(MAKECMDGOALS),$(TARGET))
   1.456 +  -include $(DEPFILES)
   1.457 +endif