Separate LDFLAGS and LDLIBS. Add debug settings

This commit is contained in:
rexy712 2021-04-12 13:41:25 -07:00
parent 53e3e5bf78
commit 46ad8869b8
5 changed files with 99 additions and 16 deletions

View File

@ -27,6 +27,8 @@ LIBDIRS::=lib
INCLUDE_DIRS::=include
CFLAGS::=-std=c18 -Wall -pedantic -Wextra
CXXFLAGS::=-std=c++17 -Wall -pedantic -Wextra
DEBUG_CFLAGS::=
DEBUG_CXXFLAGS::=
EXT::=cpp
LANG::=$(EXT)
MAIN_EXECUTABLE::=tester
@ -41,6 +43,8 @@ ifneq ($(WINDOWS),1)
CXX::=g++
LDLIBS::=
LDFLAGS::=
DEBUG_LDLIBS::=
DEBUG_LDFLAGS::=
STRIP::=strip
RANLIB::=ranlib
AR::=ar
@ -53,6 +57,8 @@ else #windows
CXX::=$(MINGW_PREFIX)g++
LDLIBS::=
LDFLAGS::=
DEBUG_LDLIBS::=
DEBUG_LDFLAGS::=
STRIP::=$(MINGW_PREFIX)strip
RANLIB::=$(MINGW_PREFIX)ranlib
AR::=$(MINGW_PREFIX)ar
@ -100,13 +106,18 @@ endif
#setup compiler and flags based on language
ifeq ($(LANG),cpp)
COMPILER_FLAGS::=$(CXXFLAGS)
ifneq ($(RELEASE),1)
COMPILER_FLAGS+= $(DEBUG_CXXFLAGS)
endif
COMPILER::=$(CXX)
else ifeq ($(LANG),c)
COMPILER_FLAGS::=$(CFLAGS)
ifneq ($(RELEASE),1)
COMPILER_FLAGS+= $(DEBUG_CFLAGS)
endif
COMPILER::=$(CC)
endif
ifeq ($(RELEASE),1)
#a lot of false strict aliasing warnings from gcc 9
COMPILER_FLAGS+=-O2 -Wno-strict-aliasing
@ -138,8 +149,13 @@ INTERNAL_LINKFLAGS=$(foreach dir,$(LIBDIRS),-L"$(dir)")
INTERNAL_SOURCES::=$(SOURCES) $(foreach source,$(SOURCE_DIRS),$(foreach ext,$(EXT),$(wildcard $(source)/*.$(ext))))
OBJECTS::=$(addprefix $(OBJDIR)/,$(subst \,.,$(subst /,.,$(addsuffix .o,$(INTERNAL_SOURCES)))))
ALL_COMPILEFLAGS=$(COMPILER_FLAGS) $(INTERNAL_COMPILERFLAGS)
ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS)
ifeq ($(RELEASE),1)
ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS)
ALL_LDLIBS=$(LDLIBS)
else
ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS) $(DEBUG_LDFLAGS)
ALL_LDLIBS=$(LDLIBS) $(DEBUG_LDLIBS)
endif
#just a variable for a newline
define \n
@ -168,7 +184,7 @@ flags-update: cflags-update ldflags-update
#Link executable
$(MAIN_EXECUTABLE): $(OBJECTS) $(LDFLAGS_TMPFILE)
$(COMPILER) $(OBJECTS) -o "$(basename $@)" $(ALL_LINKFLAGS) $(LDLIBS)
$(COMPILER) $(OBJECTS) -o "$(basename $@)" $(ALL_LINKFLAGS) $(ALL_LDLIBS)
ifeq ($(RELEASE),1)
$(STRIP) --strip-all "$(MAIN_EXECUTABLE)"
endif

View File

@ -27,6 +27,8 @@ LIBDIRS::=lib
INCLUDE_DIRS::=include
CFLAGS::=-std=c18 -Wall -pedantic -Wextra
CXXFLAGS::=-std=c++17 -Wall -pedantic -Wextra
DEBUG_CFLAGS::=
DEBUG_CXXFLAGS::=
EXT::=cpp
LANG::=$(EXT)
MAIN_EXECUTABLE::=tester
@ -45,6 +47,8 @@ ifneq ($(WINDOWS),1)
CXX::=g++
LDLIBS::=
LDFLAGS::=
DEBUG_LDLIBS::=
DEBUG_LDFLAGS::=
STRIP::=strip
RANLIB::=ranlib
AR::=ar
@ -57,6 +61,8 @@ else #windows
CXX::=$(MINGW_PREFIX)g++
LDLIBS::=
LDFLAGS::=
DEBUG_LDLIBS::=
DEBUG_LDFLAGS::=
STRIP::=$(MINGW_PREFIX)strip
RANLIB::=$(MINGW_PREFIX)ranlib
AR::=$(MINGW_PREFIX)ar
@ -97,9 +103,15 @@ endif
#setup compiler and flags based on language
ifeq ($(LANG),cpp)
COMPILER_FLAGS::=$(CXXFLAGS)
ifneq ($(RELEASE),1)
COMPILER_FLAGS+= $(DEBUG_CXXFLAGS)
endif
COMPILER::=$(CXX)
else ifeq ($(LANG),c)
COMPILER_FLAGS::=$(CFLAGS)
ifneq ($(RELEASE),1)
COMPILER_FLAGS+= $(DEBUG_CFLAGS)
endif
COMPILER::=$(CC)
endif
@ -133,11 +145,12 @@ THIS_MAKEFILE_NAME::=$(lastword $(MAKEFILE_LIST))
INTERNAL_SOURCES::=$(SOURCES) $(foreach source,$(SOURCE_DIRS),$(foreach ext,$(EXT),$(wildcard $(source)/*.$(ext))))
OBJECTS::=$(addprefix $(OBJDIR)/,$(subst \,.,$(subst /,.,$(addsuffix .o,$(INTERNAL_SOURCES)))))
ALL_COMPILEFLAGS=$(COMPILER_FLAGS) $(INTERNAL_COMPILERFLAGS)
ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS)
ifeq ($(VERBOSE),1)
SILENCER::=
ifeq ($(RELEASE),1)
ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS)
ALL_LDLIBS=$(LDLIBS)
else
SILENCER::=@
ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS) $(DEBUG_LDFLAGS)
ALL_LDLIBS=$(LDLIBS) $(DEBUG_LDLIBS)
endif
#Arguments to make submake use this makefile without "Entering directory" stuff
@ -189,7 +202,7 @@ do_strip:
#Link executable
$(MAIN_EXECUTABLE): $(OBJECTS)
@$(call PRINT_PERCENT,Linking $@)
$(SILENCER)$(COMPILER) $^ -o "$(basename $@)" $(ALL_LINKFLAGS) $(LDLIBS)
$(SILENCER)$(COMPILER) $^ -o "$(basename $@)" $(ALL_LINKFLAGS) $(ALL_LDLIBS)
#Object target recipe
define GENERATE_OBJECTS

View File

@ -27,6 +27,8 @@ LIBDIRS::=lib
INCLUDE_DIRS::=include
CFLAGS::=-std=c18 -Wall -pedantic -Wextra
CXXFLAGS::=-std=c++17 -Wall -pedantic -Wextra
DEBUG_CFLAGS::=
DEBUG_CXXFLAGS::=
EXT::=cpp
LANG::=$(EXT)
MAIN_LIBRARY::=tester
@ -43,6 +45,8 @@ ifneq ($(WINDOWS),1)
CXX::=g++
LDLIBS::=
LDFLAGS::=
DEBUG_LDLIBS::=
DEBUG_LDFLAGS::=
STRIP::=strip
RANLIB::=ranlib
AR::=ar
@ -58,6 +62,8 @@ else #windows
CXX::=$(MINGW_PREFIX)g++
LDLIBS::=
LDFLAGS::=-static-libgcc -static-libstdc++
DEBUG_LDLIBS::=
DEBUG_LDFLAGS::=-static-libgcc -static-libstdc++
STRIP::=$(MINGW_PREFIX)strip
RANLIB::=$(MINGW_PREFIX)ranlib
AR::=$(MINGW_PREFIX)ar
@ -113,9 +119,15 @@ endif
#setup compiler and flags based on language
ifeq ($(LANG),cpp)
COMPILER_FLAGS::=$(CXXFLAGS)
ifneq ($(RELEASE),1)
COMPILER_FLAGS+=$(DEBUG_CXXFLAGS)
endif
COMPILER::=$(CXX)
else ifeq ($(LANG),c)
COMPILER_FLAGS::=$(CFLAGS)
ifneq ($(RELEASE),1)
COMPILER_FLAGS+=$(DEBUG_CFLAGS)
endif
COMPILER::=$(CC)
endif
@ -154,7 +166,13 @@ INTERNAL_SOURCES::=$(SOURCES) $(foreach source,$(SOURCE_DIRS),$(foreach ext,$(EX
STATIC_OBJECTS::=$(addprefix $(OBJDIR)/static/,$(subst \,.,$(subst /,.,$(addsuffix .o,$(INTERNAL_SOURCES)))))
SHARED_OBJECTS::=$(addprefix $(OBJDIR)/shared/,$(subst \,.,$(subst /,.,$(addsuffix .o,$(INTERNAL_SOURCES)))))
ALL_COMPILEFLAGS=$(COMPILER_FLAGS) $(INTERNAL_COMPILERFLAGS)
ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS)
ifeq ($(RELEASE),1)
ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS)
ALL_LDLIBS=$(LDLIBS)
else
ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS) $(DEBUG_LDFLAGS)
ALL_LDLIBS=$(LDLIBS) $(DEBUG_LDLIBS)
endif
.PHONY: cflags-update
cflags-update:
@ -178,7 +196,7 @@ flags-update: cflags-update ldflags-update
#target for shared library
$(INTERNAL_SHARED_LIBRARY): $(SHARED_OBJECTS) $(LDFLAGS_TMPFILE)
$(COMPILER) -shared -o "$@" $(SHARED_OBJECTS) -fPIC $(ALL_LINKFLAGS) $(LDLIBS)
$(COMPILER) -shared -o "$@" $(SHARED_OBJECTS) -fPIC $(ALL_LINKFLAGS) $(ALL_LDLIBS)
ifeq ($(RELEASE),1)
$(STRIP) --strip-debug "$@"
endif

View File

@ -27,6 +27,8 @@ LIBDIRS::=lib
INCLUDE_DIRS::=include
CFLAGS::=-std=c18 -Wall -pedantic -Wextra
CXXFLAGS::=-std=c++17 -Wall -pedantic -Wextra
DEBUG_CFLAGS::=
DEBUG_CXXFLAGS::=
EXT::=cpp
LANG::=$(EXT)
MAIN_LIBRARY::=tester
@ -46,6 +48,8 @@ ifneq ($(WINDOWS),1)
CXX::=g++
LDLIBS::=
LDFLAGS::=
DEBUG_LDLIBS::=
DEBUG_LDFLAGS::=
STRIP::=strip
RANLIB::=ranlib
AR::=ar
@ -58,6 +62,8 @@ else #windows
CXX::=$(MINGW_PREFIX)g++
LDLIBS::=
LDFLAGS::=-static-libgcc -static-libstdc++
DEBUG_LDLIBS::=
DEBUG_LDFLAGS::=-static-libgcc -static-libstdc++
STRIP::=$(MINGW_PREFIX)strip
RANLIB::=$(MINGW_PREFIX)ranlib
AR::=$(MINGW_PREFIX)ar
@ -105,9 +111,15 @@ endif
#setup compiler and flags based on language
ifeq ($(LANG),cpp)
COMPILER_FLAGS::=$(CXXFLAGS)
ifneq ($(RELEASE),1)
COMPILER_FLAGS+=$(DEBUG_CXXFLAGS)
endif
COMPILER::=$(CXX)
else ifeq ($(LANG),c)
COMPILER_FLAGS::=$(CFLAGS)
ifneq ($(RELEASE),1)
COMPILER_FLAGS+=$(DEBUG_CFLAGS)
endif
COMPILER::=$(CC)
endif
@ -151,7 +163,13 @@ ifeq ($(SHARED),1)
SHARED_OBJECTS::=$(addprefix $(OBJDIR)/shared/,$(subst \,.,$(subst /,.,$(addsuffix .o,$(INTERNAL_SOURCES)))))
endif
ALL_COMPILEFLAGS=$(COMPILER_FLAGS) $(INTERNAL_COMPILERFLAGS)
ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS)
ifeq ($(RELEASE),1)
ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS)
ALL_LDLIBS=$(LDLIBS)
else
ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS) $(DEBUG_LDFLAGS)
ALL_LDLIBS=$(LDLIBS) $(DEBUG_LDLIBS)
endif
#Arguments to make submake use this makefile without "Entering directory" stuff
SUBMAKE_ARGUMENTS::=--no-print-directory -e -f "$(THIS_MAKEFILE_NAME)"
@ -197,12 +215,12 @@ endif #static
ifeq ($(WINDOWS),1)
#target for windows shared library
$(DLLOUT): $(SHARED_OBJECTS) $(LDFLAGS_TMPFILE)
$(COMPILER) -shared -o "$(DLLOUT)" $(SHARED_OBJECTS) -Wl,--out-implib,"lib$(MAIN_LIBRARY).a" $(SHARED_LIBRARY_FLAGS) $(ALL_LINKFLAGS) $(LDLIBS)
$(COMPILER) -shared -o "$(DLLOUT)" $(SHARED_OBJECTS) -Wl,--out-implib,"lib$(MAIN_LIBRARY).a" $(SHARED_LIBRARY_FLAGS) $(ALL_LINKFLAGS) $(ALL_LDLIBS)
else #windows
#target for *nix shared library
$(INTERNAL_SHARED_LIBRARY): $(SHARED_OBJECTS) $(LDFLAGS_TMPFILE)
$(COMPILER) -shared -o "$@" $(SHARED_OBJECTS) $(SHARED_LIBRARY_FLAGS) $(ALL_LINKFLAGS) $(LDLIBS)
$(COMPILER) -shared -o "$@" $(SHARED_OBJECTS) $(SHARED_LIBRARY_FLAGS) $(ALL_LINKFLAGS) $(ALL_LDLIBS)
endif #windows
#target for static library

View File

@ -27,6 +27,8 @@ LIBDIRS::=lib
INCLUDE_DIRS::=include
CFLAGS::=-std=c18 -Wall -pedantic -Wextra
CXXFLAGS::=-std=c++17 -Wall -pedantic -Wextra
DEBUG_CFLAGS::=
DEBUG_CXXFLAGS::=
EXT::=cpp
LANG::=$(EXT)
MAIN_EXECUTABLE::=tester
@ -44,6 +46,8 @@ ifneq ($(WINDOWS),1)
CXX::=g++
LDLIBS::=
LDFLAGS::=
DEBUG_LDLIBS::=
DEBUG_LDFLAGS::=
STRIP::=strip
RANLIB::=ranlib
AR::=ar
@ -56,6 +60,8 @@ else #windows
CXX::=$(MINGW_PREFIX)g++
LDLIBS::=
LDFLAGS::=
DEBUG_LDLIBS::=
DEBUG_LDFLAGS::=
STRIP::=$(MINGW_PREFIX)strip
RANLIB::=$(MINGW_PREFIX)ranlib
AR::=$(MINGW_PREFIX)ar
@ -97,9 +103,15 @@ endif
#setup compiler and flags based on language
ifeq ($(LANG),cpp)
COMPILER_FLAGS::=$(CXXFLAGS)
ifneq ($(RELEASE),1)
COMPILER_FLAGS+=$(DEBUG_CXXFLAGS)
endif
COMPILER::=$(CXX)
else ifeq ($(LANG),c)
COMPILER_FLAGS::=$(CFLAGS)
ifneq ($(RELEASE),1)
COMPILER_FLAGS+=$(DEBUG_CFLAGS)
endif
COMPILER::=$(CC)
endif
@ -134,7 +146,13 @@ THIS_MAKEFILE_NAME::=$(lastword $(MAKEFILE_LIST))
INTERNAL_SOURCES::=$(SOURCES) $(foreach source,$(SOURCE_DIRS),$(foreach ext,$(EXT),$(wildcard $(source)/*.$(ext))))
OBJECTS::=$(addprefix $(OBJDIR)/,$(subst \,.,$(subst /,.,$(addsuffix .o,$(INTERNAL_SOURCES)))))
ALL_COMPILEFLAGS=$(COMPILER_FLAGS) $(INTERNAL_COMPILERFLAGS)
ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS)
ifeq ($(RELEASE),1)
ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS)
ALL_LDLIBS=$(LDLIBS)
else
ALL_LINKFLAGS=$(INTERNAL_LINKFLAGS) $(LDFLAGS) $(DEBUG_LDFLAGS)
ALL_LDLIBS=$(LDLIBS) $(DEBUG_LDLIBS)
endif
#Arguments to make submake use this makefile without "Entering directory" stuff
SUBMAKE_ARGUMENTS::=--no-print-directory -e -f "$(THIS_MAKEFILE_NAME)"
@ -170,7 +188,7 @@ all: flags-update
#Link executable
$(MAIN_EXECUTABLE): $(OBJECTS) $(LDFLAGS_TMPFILE)
$(COMPILER) $(OBJECTS) -o "$(basename $@)" $(ALL_LINKFLAGS) $(LDLIBS)
$(COMPILER) $(OBJECTS) -o "$(basename $@)" $(ALL_LINKFLAGS) $(ALL_LDLIBS)
ifeq ($(RELEASE),1)
$(STRIP) --strip-all "$@"
endif