forked from lix-project/lix
ea2f7df5fa
There are flags that must be set, so they shouldn't be overriden by the user's CFLAGS or CXXFLAGS.
103 lines
2.3 KiB
Makefile
103 lines
2.3 KiB
Makefile
default: all
|
|
|
|
|
|
# Include Autoconf variables.
|
|
Makefile.config: Makefile.config.in
|
|
./config.status
|
|
|
|
include Makefile.config
|
|
|
|
|
|
# Include all sub-Makefiles.
|
|
define include_sub_makefile =
|
|
d := $$(patsubst %/, %, $$(dir $(1)))
|
|
include $(1)
|
|
endef
|
|
|
|
$(foreach mf, $(SUBS), $(eval $(call include_sub_makefile, $(mf))))
|
|
|
|
|
|
clean_list :=
|
|
dist_files :=
|
|
|
|
|
|
QUIET = @
|
|
|
|
%.o: %.cc
|
|
$(QUIET) $(CXX) -o $@ -c $< -g -fPIC $(GLOBAL_CXXFLAGS) $(CXXFLAGS) $($@_CXXFLAGS) -MMD -MF $(basename $@).dep -MP
|
|
|
|
%.o: %.c
|
|
$(QUIET) $(CC) -o $@ -c $< -g -fPIC $(GLOBAL_CFLAGS) $(CFLAGS) $($@_CFLAGS) -MMD -MF $(basename $@).dep -MP
|
|
|
|
|
|
# Generate Make rules for libraries.
|
|
libs_list :=
|
|
|
|
define LIBS_template =
|
|
_d := $$($(1)_DIR)
|
|
_srcs := $$(foreach src, $$($(1)_SOURCES), $$(_d)/$$(src))
|
|
_objs := $$(addsuffix .o, $$(basename $$(_srcs)))
|
|
_libs := $$(foreach lib, $$($(1)_LIBS), $$(lib).a)
|
|
_lib := $$(_d)/$(1).a
|
|
|
|
$$(_lib): $$(_objs)
|
|
$(QUIET) ar crs $$@ $$?
|
|
|
|
# Propagate CXXFLAGS to the individual object files.
|
|
$$(foreach obj, $$(_objs), $$(eval $$(obj)_CXXFLAGS=$$($(1)_CXXFLAGS)))
|
|
|
|
include $$(wildcard $$(_d)/*.dep)
|
|
|
|
libs_list += $$(_lib)
|
|
clean_list += $$(_d)/*.a $$(_d)/*.o $$(_d)/*.dep
|
|
dist_files += $$(_srcs)
|
|
endef
|
|
|
|
$(foreach lib, $(LIBS), $(eval $(call LIBS_template,$(lib))))
|
|
|
|
|
|
# Generate Make rules for programs.
|
|
programs_list :=
|
|
|
|
define PROGRAMS_template =
|
|
_d := $$($(1)_DIR)
|
|
_srcs := $$(foreach src, $$($(1)_SOURCES), $$(_d)/$$(src))
|
|
_objs := $$(addsuffix .o, $$(basename $$(_srcs)))
|
|
_libs := $$(foreach lib, $$($(1)_LIBS), $$($$(lib)_DIR)/$$(lib).a)
|
|
_prog := $$(_d)/$(1)
|
|
|
|
$$(_prog): $$(_objs) $$(_libs)
|
|
$(QUIET) g++ -o $$@ $$^ $$($(1)_LDFLAGS) $$(foreach lib, $$($(1)_LIBS), $$($$(lib)_LDFLAGS))
|
|
|
|
# Propagate CXXFLAGS to the individual object files.
|
|
$$(foreach obj, $$(_objs), $$(eval $$(obj)_CXXFLAGS=$$($(1)_CXXFLAGS)))
|
|
|
|
include $$(wildcard $$(_d)/*.dep)
|
|
|
|
programs_list += $$(_prog)
|
|
clean_list += $$(_prog) $$(_d)/*.o $$(_d)/*.dep
|
|
dist_files += $$(_srcs)
|
|
endef
|
|
|
|
$(foreach prog, $(PROGRAMS), $(eval $(call PROGRAMS_template,$(prog))))
|
|
|
|
|
|
# Distributing stuff.
|
|
dist_name = $(PACKAGE_NAME)-$(PACKAGE_VERSION)
|
|
|
|
dist:
|
|
@echo $(dist_files)
|
|
$(QUIET) tar cvfj $(dist_name).tar.bz2 $(dist_files) --transform 's,^,$(dist_name)/,'
|
|
|
|
|
|
# Cleaning stuff.
|
|
|
|
clean:
|
|
rm -fv $(clean_list)
|
|
|
|
dryclean:
|
|
@echo $(clean_list)
|
|
|
|
|
|
all: $(programs_list)
|