Vynokris
Vynokris

Reputation: 31

SFML library doesn't link with makefile compilation

I have been trying to link the SFML dlls to my windows C++ project, but I can't get it to work. I always end up with:

fatal error: SFML/System.hpp: No such file or directory

I've tried a bunch of things but nothing changes the issue. Here is my makefile:

PROGRAM   = zero_flip
OBJS      = src/main.o src/Math.o src/card.o src/game_board.o src/indicator.o src/ui.o

CXX       = g++
CXX_FLAGS = -O0 -g -Wall -Wextra -Wno-unused-parameter -Wno-unused-variable

LIB_DIRS  = -L./Resources/libs/
LIBS      = -lsfml-system -lsfml-graphics -lsfml-window -lsfml-audio
LNK_FLAGS = $(LIB_DIRS) $(LIBS)

DEPS=$(OBJS:.o=.d)

.PHONY: all clean

all: $(PROGRAM)

-include $(DEPS)

%.o: %.cpp
    $(CXX) $(CXX_FLAGS) $(LNK_FLAGS) $< -o $@

$(PROGRAM): $(OBJS)
    $(CXX) $(CXX_FLAGS) $(LNK_FLAGS) $^ -o $@

clean:
    rm -f $(OBJS) $(DEPS) $(PROGRAM) && clear

The "./Resources/libs/" directory contains:

Can anyone get me unstuck please this is driving me mad.

Upvotes: 0

Views: 577

Answers (1)

MadScientist
MadScientist

Reputation: 100781

This is wrong:

%.o: %.cpp
        $(CXX) $(CXX_FLAGS) $(LNK_FLAGS) $< -o $@

This rule says it will compile a source file into an object file, but the recipe actually builds a complete executable: it will compile the source file like xxx.cpp then link it into a program named xxx.o. You need to invoke just the compiler here, not the linker, so you should not have $(LNK_FLAGS) and you need to add the -c option to tell the compiler to stop after compiling and not link.

Then you need to add an -I option to the compile line telling the compiler where to find the header files needed during compilation... in this case SFML/System.hpp.

Upvotes: 1

Related Questions