未定义的引用错误 Makefile c++

undefined reference error Makefile c++

我按照下面的方式编写了 makefile,并为存储在 AM.cpp 中并在 main 中使用的所有函数得到了未定义的引用错误。我做错了什么?

CCX=g++
FLAGS +=-c -Wall -lopenal -lSDL
LINK_FLAGS += -lopenal -lSDL

all: MyExe
MyExe: main.o
    $(CXX) main.o $(LINK_FLAGS) -o MyExe
main.o: main.cpp AM.cpp AB.cpp AS.cpp
    $(CXX) $(FLAGS) main.cpp AM.cpp AB.cpp AS.cpp

您应该为您拥有的每个 cpp 编译一个对象,然后在最后的链接步骤中您应该为所有这些对象命名。

此外,库只需要在链接器标志中指定。

像这样:

CCX=g++
FLAGS +=-c -Wall
LINK_FLAGS += -lopenal -lSDL

all: MyExe
MyExe: main.o AM.o AB.o AS.o
    $(CXX) main.o AM.o AB.o AS.o $(LINK_FLAGS) -o MyExe
main.o: main.cpp
    $(CXX) $(FLAGS) main.cpp
AM.o: AM.cpp
    $(CXX) $(FLAGS) AM.cpp
AB.o: AB.cpp
    $(CXX) $(FLAGS) AB.cpp
AS.o: AS.cpp
    $(CXX) $(FLAGS) AS.cpp

创建一个可以重复使用的通用 makefile 也不是一个坏主意。我的看起来像这样:

CXX=gcc
CXX_FLAGS=-c -O0 -Wall -Wextra
CXX_LFLAGS=-lssl -lcrypto -ldl -liniparser
SOURCES=main.cpp test.cpp ...cpp #add your source files here
OBJECTS=$(SOURCES:.cpp=.o) #takes the .cpp files from the SOURCES var and replaces the .cpp with .o for each
EXEC=yourapp

all: $(SOURCES) $(EXEC)

clean:
    rm -f $(OBJECTS)
    rm -f $(EXEC)

$(EXEC): $(OBJECTS)
    $(CXX) -o $@ $(OBJECTS) $(CXX_LFLAGS) #$@ will be replaced with the content of EXEC, so your applications name

#a build rule for all .cpp files to be compiled to a .o file. % is a placeholder for the actual name of the file
%.o: %.cpp 
    $(CXX) $(CXX_FLAGS) $<  # $< will be replaced with the .cpp file name