12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- # BINARY-DIRECTORY-MAKEFILE
- # conventions:
- # - there are no subdirectories, they are ignored!
- # - all ".C", ".cpp" and ".c" files in the current directory are considered
- # independent binaries, and linked as such.
- # - the binaries depend on the library of the parent directory
- # - the binary names are created with $(BINNAME), i.e. it will be more or less
- # the name of the .o file
- # - all binaries will be added to the default build list ALL_BINARIES
- # --------------------------------
- # - remember the last subdirectory
- #
- # set the variable $(SUBDIR) correctly to the current subdirectory. this
- # variable can be used throughout the current makefile.inc. The many
- # SUBDIR_before, _add, and everything are only required so that we can recover
- # the previous content of SUBDIR before exitting the makefile.inc
- SUBDIR_add:=$(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))
- SUBDIR_before:=$(SUBDIR)
- SUBDIR:=$(strip $(SUBDIR_add))
- SUBDIR_before_$(SUBDIR):=$(SUBDIR_before)
- # ------------------------
- # - include subdirectories
- #
- # note the variables $(SUBDIRS_OF_$(SUBDIR)) are required later on to recover
- # the dependencies automatically. if you handle dependencies on your own, you
- # can also dump the $(SUBDIRS_OF_$(SUBDIR)) variable, and include the
- # makefile.inc of the subdirectories on your own...
- #SUBDIRS_OF_$(SUBDIR):=$(patsubst %/Makefile.inc,%,$(wildcard $(SUBDIR)*/Makefile.inc))
- #include $(SUBDIRS_OF_$(SUBDIR):%=%/Makefile.inc)
- # ----------------------------
- # - include local dependencies
- #
- # include the libdepend.inc file, which gives additional dependencies for the
- # libraries and binaries. additionally, an automatic dependency from the library
- # of the parent directory is added (commented out in the code below).
- -include $(SUBDIR)libdepend.inc
- PARENTDIR:=$(patsubst %/,%,$(dir $(patsubst %/,%,$(SUBDIR))))
- $(eval $(call PKG_DEPEND_INT,$(PARENTDIR)))
- # ---------------------------
- # - objects in this directory
- #
- # the use of the variable $(OBJS) is not mandatory. it is mandatory however
- # to update $(ALL_OBJS) in a way that it contains the path and name of
- # all objects. otherwise we can not include the appropriate .d files.
- OBJS:=$(patsubst %.cpp,$(OBJDIR)%.o,$(notdir $(wildcard $(SUBDIR)*.cpp))) \
- $(patsubst %.C,$(OBJDIR)%.o,$(notdir $(wildcard $(SUBDIR)*.C))) \
- $(shell grep -ls Q_OBJECT $(SUBDIR)*.h | sed -e's@^@/@;s@.*/@$(OBJDIR)moc_@;s@\.h$$@.o@') \
- $(patsubst %.c,$(OBJDIR)%.o,$(notdir $(wildcard $(SUBDIR)*.c)))
- ALL_OBJS += $(OBJS)
- # ----------------------------
- # - binaries in this directory
- #
- # output of binaries in this directory. none of the variables has to be used.
- # but everything you add to $(ALL_LIBRARIES) and $(ALL_BINARIES) will be
- # compiled with `make all`. be sure again to add the files with full path.
- BINARIES:=$(patsubst %.o,$(BINDIR)%,$(filter-out moc_%,$(notdir $(OBJS))))
- ALL_BINARIES+=$(BINARIES)
- # ---------------------
- # - binary dependencies
- #
- # there is no way of determining the binary dependencies automatically, so we
- # follow conventions. each binary depends on the corresponding .o file and
- # on the libraries specified by the INTLIBS/EXTLIBS. these dependencies can be
- # specified manually or they are automatically stored in a .bd file.
- $(foreach head,$(wildcard $(SUBDIR)*.h),$(eval $(shell grep -q Q_OBJECT $(head) && echo $(head) | sed -e's@^@/@;s@.*/\(.*\)\.h$$@$(BINDIR)\1:$(OBJDIR)moc_\1.o@')))
- -include $(OBJS:%.o=%.bd)
- # -------------------
- # - subdir management
- #
- # as the last step, always add this line to correctly recover the subdirectory
- # of the makefile including this one!
- SUBDIR:=$(SUBDIR_before_$(SUBDIR))
|