lkky7
lkky7

Reputation: 567

C++/Makefile error: undefined reference to `main'

The file tree in my C++ project is like this:

project/
        source/
                main.cpp (with int main() function)
                a.cpp
                a.h
                b.cpp
                ...
        obj/
        Makefile

But when I compile it, it throws an error: "In function _start': (.text+0x20): undefined reference to main'"

My makefile is:

EXECUTABLE = name_of_program
CXX = g++
CXXFLAGS = -Wall -Isource
LIBS =

SRC_DIR = source
OBJ_DIR = obj
SRC = $(wildcard $(SRC_DIR)/*.cpp)
OBJ = $(SRC:$(SRC_DIR)/%.cpp=$(OBJ_DIR)/%.o)

.PHONY: all clean

all: $(EXECUTABLE)

$(EXECUTABLE): $(OBJ)
        $(CXX) -o $@ $^ $(LIBS) 

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
        $(CXX) $(CXXFLAGS) -o $@ $<
        $(CXX) $(CXXFLAGS) -o $@ -c $< 

clean:
        rm $(OBJ)

Which things should I correct in order to make it compile correctly? I know it's a compiler error but I'm sure it's about Makefile.

Upvotes: 1

Views: 502

Answers (1)

merlin2011
merlin2011

Reputation: 75669

I don't have enough of your source to reproduce the problem, but by inspection, it looks like you have an extra line here:

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
        $(CXX) $(CXXFLAGS) -o $@ $<
        $(CXX) $(CXXFLAGS) -o $@ -c $< 

Remove the first line so you don't try to link each object file independently.

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
        $(CXX) $(CXXFLAGS) -o $@ -c $< 

Upvotes: 2

Related Questions