Better install process
This commit is contained in:
parent
13ceb48407
commit
96d1e61a61
|
@ -70,13 +70,14 @@ DLL_PFX= lib
|
|||
# Build rules
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
MAKE_CC= $(CC) $(CFLAGS) $(CPPFLAGS_$*) $(CFLAGS_$*) -c $< -o $@ $(DEPFLAGS)
|
||||
MAKE_CXX= $(CXX) $(CXXFLAGS) $(CPPFLAGS_$*) $(CXXFLAGS_$*) -c $< -o $@ $(DEPFLAGS)
|
||||
MAKE_AS= $(CC) $(CFLAGS) $(CPPFLAGS_$*) $(CFLAGS_$*) -c $< -o $@ $(DEPFLAGS)
|
||||
MAKE_OBJDIR= mkdir -p $* && touch $@
|
||||
MAKE_LIB= $(AR) $@ $(LINK_INPUTS)&& $(RANLIB) $@
|
||||
MAKE_DLL= $(LD) -shared $(LDFLAGS) $(LDFLAGS_$*) $(LINK_CMDLINE) -o $@
|
||||
MAKE_EXE= $(LD) $(LDFLAGS) $(LDFLAGS_$*) $(LINK_CMDLINE) -o $@
|
||||
MAKE_CC= $(CC) $(CFLAGS) $(CPPFLAGS_$*) $(CFLAGS_$*) -c $< -o $@ $(DEPFLAGS)
|
||||
MAKE_CXX= $(CXX) $(CXXFLAGS) $(CPPFLAGS_$*) $(CXXFLAGS_$*) -c $< -o $@ $(DEPFLAGS)
|
||||
MAKE_AS= $(CC) $(CFLAGS) $(CPPFLAGS_$*) $(CFLAGS_$*) -c $< -o $@ $(DEPFLAGS)
|
||||
MAKE_DIR= mkdir -p $*
|
||||
MAKE_OBJDIR= $(MAKE_DIR) && touch $@
|
||||
MAKE_LIB= $(AR) $@ $(LINK_INPUTS)&& $(RANLIB) $@
|
||||
MAKE_DLL= $(LD) -shared $(LDFLAGS) $(LDFLAGS_$*) $(LINK_CMDLINE) -o $@
|
||||
MAKE_EXE= $(LD) $(LDFLAGS) $(LDFLAGS_$*) $(LINK_CMDLINE) -o $@
|
||||
|
||||
LINK_DIR_OPT= -L
|
||||
LINK_LIB_OPT= -l
|
||||
|
|
|
@ -49,6 +49,15 @@ LAST_LOG?=$(LOGS)make.log
|
|||
# Stuff to clean
|
||||
TO_CLEAN= *~ *.bak
|
||||
|
||||
# Stuff to install
|
||||
TO_INSTALL= $(OUTPUT_EXE:%=%.install_exe) \
|
||||
$(OUTPUT_LIB:%=%.install_lib) \
|
||||
$(OUTPUT_DLL:%=%.install_dll) \
|
||||
$(EXE_INSTALL:%=%.install_exe) \
|
||||
$(LIB_INSTALL:%=%.install_lib) \
|
||||
$(DLL_INSTALL:%=%.install_dll) \
|
||||
$(HDR_INSTALL:%=%.install_hdr)
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Installation paths
|
||||
|
|
|
@ -116,12 +116,13 @@ LINK_DLL_OPT=-l:
|
|||
# In order to merge all .pdb information for an executable, we need to pass the -debug
|
||||
# option to the linker.
|
||||
|
||||
MAKE_CC= $(CC) $(CFLAGS) $(CPPFLAGS_$*) $(CFLAGS_$*) -c -Fo$@ $<
|
||||
MAKE_CXX= $(CXX) $(CXXFLAGS) $(CPPFLAGS_$*) $(CXXFLAGS_$*) -c -Fo$@ $<
|
||||
MAKE_OBJDIR= mkdir -p $* && touch $@
|
||||
MAKE_LIB= $(MSLIB) $(LINK_INPUTS) -out:$@
|
||||
MAKE_DLL= $(LD) $(LDFLAGS) $(LDFLAGS_$*) $(LINK_CMDLINE)-dll -out:$@
|
||||
MAKE_EXE= $(LD) $(LDFLAGS) $(LDFLAGS_$*) $(LINK_CMDLINE) -out:$@
|
||||
MAKE_CC= $(CC) $(CFLAGS) $(CPPFLAGS_$*) $(CFLAGS_$*) -c -Fo$@ $<
|
||||
MAKE_CXX= $(CXX) $(CXXFLAGS) $(CPPFLAGS_$*) $(CXXFLAGS_$*) -c -Fo$@ $<
|
||||
MAKE_DIR= mkdir -p $*
|
||||
MAKE_OBJDIR= $(MAKE_DIR) && touch $@
|
||||
MAKE_LIB= $(MSLIB) $(LINK_INPUTS) -out:$@
|
||||
MAKE_DLL= $(LD) $(LDFLAGS) $(LDFLAGS_$*) $(LINK_CMDLINE)-dll -out:$@
|
||||
MAKE_EXE= $(LD) $(LDFLAGS) $(LDFLAGS_$*) $(LINK_CMDLINE) -out:$@
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
|
58
rules.mk
58
rules.mk
|
@ -105,16 +105,7 @@ test tests check: $(TARGET)
|
|||
startup restart rebuild: clean all
|
||||
|
||||
# Installation
|
||||
install: all
|
||||
$(PRINT_COMMAND) $(MAKE) RECURSE=install install-internal recurse LOG_COMMANDS= TIME= $(LOG_COMMANDS)
|
||||
install-internal: \
|
||||
$(OUTPUT_EXE:%=%.install_exe) \
|
||||
$(OUTPUT_LIB:%=%.install_lib) \
|
||||
$(OUTPUT_DLL:%=%.install_dll) \
|
||||
$(EXE_INSTALL:%=%.install_exe) \
|
||||
$(LIB_INSTALL:%=%.install_lib) \
|
||||
$(DLL_INSTALL:%=%.install_dll) \
|
||||
$(HDR_INSTALL:%=%.install_hdr)
|
||||
install: install-all
|
||||
|
||||
clean: $(SUBDIRS:%=%.clean)
|
||||
-$(PRINT_CLEAN) rm -f $(TO_CLEAN) $(OBJECTS) $(DEPENDENCIES) $(OBJPRODUCTS) config.h
|
||||
|
@ -129,10 +120,10 @@ help:
|
|||
@$(ECHO) "Available targets:"
|
||||
@$(ECHO) " make : Build default target (TARGET=$(TARGET))"
|
||||
@$(ECHO) " make all : Same"
|
||||
@$(ECHO) " make debug : Force debug build"
|
||||
@$(ECHO) " make opt : Force optimized build"
|
||||
@$(ECHO) " make release : Force release build"
|
||||
@$(ECHO) " make profile : Force profile build"
|
||||
@$(ECHO) " make debug : Debug build"
|
||||
@$(ECHO) " make opt : Optimized build with debug info"
|
||||
@$(ECHO) " make release : Release build without debug info"
|
||||
@$(ECHO) " make profile : Profile build"
|
||||
@$(ECHO) " make clean : Clean build results (only BUILDENV=$(BUILDENV))"
|
||||
@$(ECHO) " make rebuild : Clean before building"
|
||||
@$(ECHO) " make nuke : Clean build directory"
|
||||
|
@ -169,7 +160,8 @@ prebuild: config
|
|||
objects: prebuild
|
||||
objects:$(OBJDIR:%=%.mkdir) $(OBJECTS)
|
||||
product:$(OBJPRODUCTS)
|
||||
postbuild: product
|
||||
postbuild: product $(DO_INSTALL)
|
||||
do_install: $(TO_INSTALL)
|
||||
goodbye: postbuild
|
||||
|
||||
# Run the test (in the object directory)
|
||||
|
@ -185,13 +177,13 @@ product.test: product .ALWAYS
|
|||
$(PRINT_TEST) $(TEST_ENV) $(TEST_CMD_$*) $(OUTPUT)$*$(EXE_EXT) $(TEST_ARGS_$*)
|
||||
|
||||
# Installing the product: always need to build it first
|
||||
%.install_exe: $(PREFIX_BIN).mkdir build
|
||||
%.install_exe: $(PREFIX_BIN).mkdir-only product
|
||||
$(PRINT_INSTALL) $(INSTALL) $* $(PREFIX_BIN)
|
||||
%.install_lib: $(PREFIX_LIB).mkdir build
|
||||
%.install_lib: $(PREFIX_LIB).mkdir-only product
|
||||
$(PRINT_INSTALL) $(INSTALL) $* $(PREFIX_LIB)
|
||||
%.install_dll: $(PREFIX_DLL).mkdir build
|
||||
%.install_dll: $(PREFIX_DLL).mkdir-only product
|
||||
$(PRINT_INSTALL) $(INSTALL) $* $(PREFIX_DLL)
|
||||
%.install_hdr: $(PREFIX_HDR).mkdir
|
||||
%.install_hdr: $(PREFIX_HDR).mkdir-only
|
||||
$(PRINT_INSTALL) $(INSTALL) $* $(PREFIX_HDR)
|
||||
|
||||
# Benchmarking (always done with profile target)
|
||||
|
@ -221,6 +213,14 @@ v-% verbose-%:
|
|||
t-% time-%:
|
||||
$(PRINT_COMMAND) time $(MAKE) $*
|
||||
|
||||
# Timed build (show the time for each step)
|
||||
notime-%:
|
||||
$(PRINT_COMMAND) $(MAKE) TIME= $*
|
||||
|
||||
# Installation build
|
||||
install-%:
|
||||
$(PRINT_COMMAND) $(MAKE) DO_INSTALL=do_install
|
||||
|
||||
# Deep build (re-check all libraries instead of just resulting .a)
|
||||
d-% deep-%:
|
||||
$(PRINT_COMMAND) $(MAKE) $* DEEP_BUILD=deep_build
|
||||
|
@ -284,7 +284,7 @@ PRINT_COMPILE= $(PRINT_COMMAND) $(INFO) "[COMPILE$(PRINT_COUNT)] " $<;
|
|||
PRINT_BUILD= $(PRINT_COMMAND) $(INFO) "[BUILD]" $(shell basename $@);
|
||||
PRINT_GENERATE= $(PRINT_COMMAND) $(INFO) "[GENERATE]" "$(shell basename "$@")";
|
||||
PRINT_VARIANT= $(PRINT_COMMAND) $(INFO) "[VARIANT]" "$*";
|
||||
PRINT_INSTALL= $(PRINT_COMMAND) $(INFO) "[INSTALL] " $(*F) in $(<D);
|
||||
PRINT_INSTALL= $(PRINT_COMMAND) $(INFO) "[INSTALL] " $(*F) in $(<D) $(COLORIZE);
|
||||
PRINT_CLEAN= $(PRINT_COMMAND) $(INFO) "[CLEAN] " $@ $(PRETTY_DIR) $(COLORIZE);
|
||||
PRINT_COPY= $(PRINT_COMMAND) $(INFO) "[COPY]" $< '=>' $@ ;
|
||||
PRINT_DEPEND= $(PRINT_COMMAND) $(INFO) "[DEPEND] " $< ;
|
||||
|
@ -295,6 +295,8 @@ PRINT_LIBCONFIG=$(PRINT_COMMAND) $(INFO) "[LIBCONFIG]" "lib$*" ;
|
|||
endif
|
||||
|
||||
logs.mkdir: $(LOGS).mkdir $(dir $(LAST_LOG))/.mkdir
|
||||
%/.mkdir-only:
|
||||
$(PRINT_COMMAND) $(MAKE_DIR)
|
||||
%/.mkdir:
|
||||
$(PRINT_COMMAND) $(MAKE_OBJDIR)
|
||||
.PRECIOUS: %/.mkdir
|
||||
|
@ -356,14 +358,6 @@ $(OUTPUT_DLL): $(LINK_INPUTS) $$(LINK_INPUTS) $(MAKEFILE_DEPS)
|
|||
$(OUTPUT_EXE): $(LINK_INPUTS) $$(LINK_INPUTS) $(MAKEFILE_DEPS)
|
||||
$(PRINT_BUILD) $(MAKE_EXE)
|
||||
|
||||
# Only build the leaf projects in parallel,
|
||||
# since we don't have proper dependency between independent
|
||||
# libraries and we may otherwise end up building the same
|
||||
# library multiple times "in parallel" (wasting energy)
|
||||
ifneq ($(SUBDIRS)$(VARIANTS),)
|
||||
$(NOT_PARALLEL):
|
||||
endif
|
||||
|
||||
# Include dependencies from current directory
|
||||
# We only build when the target is set to avoid dependencies on 'clean'
|
||||
ifeq ($(MAKECMDGOALS),build)
|
||||
|
@ -461,3 +455,11 @@ endif
|
|||
|
||||
# Build with a single shell for all commands
|
||||
.ONESHELL:
|
||||
|
||||
# Only build the leaf projects in parallel,
|
||||
# since we don't have proper dependency between independent
|
||||
# libraries and we may otherwise end up building the same
|
||||
# library multiple times "in parallel" (wasting energy)
|
||||
ifneq ($(SUBDIRS)$(VARIANTS),)
|
||||
$(NOT_PARALLEL):
|
||||
endif
|
||||
|
|
Loading…
Reference in New Issue