Closed techie-guy closed 7 months ago
Can you share the generated makefile?
I have updated the premake5 script as the earlier one didn't reproduce the issue
Also here's the generated test-app.make
# Alternative GNU Make project makefile autogenerated by Premake
ifndef config
config=debug_native
endif
ifndef verbose
SILENT = @
endif
.PHONY: clean prebuild
SHELLTYPE := posix
ifeq (.exe,$(findstring .exe,$(ComSpec)))
SHELLTYPE := msdos
endif
# Configurations
# #############################################
INCLUDES +=
FORCE_INCLUDE +=
ALL_CPPFLAGS += $(CPPFLAGS) -MD -MP $(DEFINES) $(INCLUDES)
ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES)
LIBS +=
LDDEPS +=
ALL_LDFLAGS += $(LDFLAGS)
LINKCMD = $(CC) -o "$@" $(OBJECTS) $(RESOURCES) $(ALL_LDFLAGS) $(LIBS)
define PREBUILDCMDS
endef
define PRELINKCMDS
endef
define POSTBUILDCMDS
endef
ifeq ($(config),debug_native)
ifeq ($(origin CC), default)
CC = clang
endif
ifeq ($(origin CXX), default)
CXX = clang++
endif
ifeq ($(origin AR), default)
AR = ar
endif
TARGETDIR = bin/Debug-Native/test-app
TARGET = $(TARGETDIR)/test-app
OBJDIR = bin/Debug-Native/test-app/obj
DEFINES += -D_PLATFORM_NATIVE -DDEBUG
ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -g
ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -g
else ifeq ($(config),debug_web)
ifeq ($(origin CC), default)
CC = emcc
endif
ifeq ($(origin CXX), default)
CXX = em++
endif
ifeq ($(origin AR), default)
AR = emar
endif
TARGETDIR = bin/Debug-Web/test-app
TARGET = $(TARGETDIR)/test-app.html
OBJDIR = bin/Debug-Web/test-app/obj
DEFINES += -D_PLATFORM_WEB -DDEBUG
ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -g
ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -g
else ifeq ($(config),release_native)
ifeq ($(origin CC), default)
CC = clang
endif
ifeq ($(origin CXX), default)
CXX = clang++
endif
ifeq ($(origin AR), default)
AR = ar
endif
TARGETDIR = bin/Release-Native/test-app
TARGET = $(TARGETDIR)/test-app
OBJDIR = bin/Release-Native/test-app/obj
DEFINES += -D_PLATFORM_NATIVE -DNDEBUG
ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -O2
ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -O2
else ifeq ($(config),release_web)
ifeq ($(origin CC), default)
CC = emcc
endif
ifeq ($(origin CXX), default)
CXX = em++
endif
ifeq ($(origin AR), default)
AR = emar
endif
TARGETDIR = bin/Release-Web/test-app
TARGET = $(TARGETDIR)/test-app.html
OBJDIR = bin/Release-Web/test-app/obj
DEFINES += -D_PLATFORM_WEB -DNDEBUG
ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -O2
ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -O2
endif
# Per File Configurations
# #############################################
# File sets
# #############################################
GENERATED :=
OBJECTS :=
ifeq ($(config),debug_web)
GENERATED += $(OBJDIR)/main.o
OBJECTS += $(OBJDIR)/main.o
else ifeq ($(config),release_web)
GENERATED += $(OBJDIR)/main.o
OBJECTS += $(OBJDIR)/main.o
endif
# Rules
# #############################################
all: $(TARGET)
@:
$(TARGETDIR):
@echo Creating $(TARGETDIR)
ifeq (posix,$(SHELLTYPE))
$(SILENT) mkdir -p $(TARGETDIR)
else
$(SILENT) mkdir $(subst /,\\,$(TARGETDIR))
endif
$(OBJDIR):
@echo Creating $(OBJDIR)
ifeq (posix,$(SHELLTYPE))
$(SILENT) mkdir -p $(OBJDIR)
else
$(SILENT) mkdir $(subst /,\\,$(OBJDIR))
endif
clean:
@echo Cleaning test-app
ifeq (posix,$(SHELLTYPE))
$(SILENT) rm -f $(TARGET)
$(SILENT) rm -rf $(GENERATED)
$(SILENT) rm -rf $(OBJDIR)
else
$(SILENT) if exist $(subst /,\\,$(TARGET)) del $(subst /,\\,$(TARGET))
$(SILENT) if exist $(subst /,\\,$(GENERATED)) del /s /q $(subst /,\\,$(GENERATED))
$(SILENT) if exist $(subst /,\\,$(OBJDIR)) rmdir /s /q $(subst /,\\,$(OBJDIR))
endif
prebuild: | $(OBJDIR)
$(PREBUILDCMDS)
ifneq (,$(PCH))
$(OBJECTS): $(GCH) | $(PCH_PLACEHOLDER)
$(GCH): $(PCH) | prebuild
@echo $(notdir $<)
$(SILENT) $(CC) -x c-header $(ALL_CFLAGS) -o "$@" -MF "$(@:%.gch=%.d)" -c "$<"
$(PCH_PLACEHOLDER): $(GCH) | $(OBJDIR)
ifeq (posix,$(SHELLTYPE))
$(SILENT) touch "$@"
else
$(SILENT) echo $null >> "$@"
endif
else
$(OBJECTS): | prebuild
endif
ifeq ($(config),debug_native)
$(TARGET): $(OBJECTS) $(LDDEPS) | $(TARGETDIR)
$(PRELINKCMDS)
@echo Linking test-app
$(SILENT) $(LINKCMD)
$(POSTBUILDCMDS)
else ifeq ($(config),debug_web)
$(TARGET): $(GENERATED) $(OBJECTS) $(LDDEPS) | $(TARGETDIR)
$(PRELINKCMDS)
@echo Linking test-app
$(SILENT) $(LINKCMD)
$(POSTBUILDCMDS)
else ifeq ($(config),release_native)
$(TARGET): $(OBJECTS) $(LDDEPS) | $(TARGETDIR)
$(PRELINKCMDS)
@echo Linking test-app
$(SILENT) $(LINKCMD)
$(POSTBUILDCMDS)
else ifeq ($(config),release_web)
$(TARGET): $(GENERATED) $(OBJECTS) $(LDDEPS) | $(TARGETDIR)
$(PRELINKCMDS)
@echo Linking test-app
$(SILENT) $(LINKCMD)
$(POSTBUILDCMDS)
endif
# File Rules
# #############################################
ifeq ($(config),debug_web)
$(OBJDIR)/main.o: main.c
@echo "$(notdir $<)"
$(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF "$(@:%.o=%.d)" -c "$<"
else ifeq ($(config),release_web)
$(OBJDIR)/main.o: main.c
@echo "$(notdir $<)"
$(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF "$(@:%.o=%.d)" -c "$<"
endif
-include $(OBJECTS:%.o=%.d)
ifneq (,$(PCH))
-include $(PCH_PLACEHOLDER).d
endif
You need to close/reset the filter, as the filters affect everything after it. When you're done applying filters, use filter {}
and that should fix it.
Ohh, I see. Thanks for your help!
What seems to be the problem? Linking starts before any compilation resulting in undefined reference to main function. This problem occurs only If I use the
Native
platform. It works fine for theWeb
platform.The output: On Running
make config=debug_native
On Running
make config=debug_web
What did you expect to happen? Compilation of the source files should happen first...
What have you tried so far? ...
How can we reproduce this? The premake5 script. I am using the emscripten module
What version of Premake are you using?