When trying to build the project on Debian WSL (Windows Subsystem for Linux) with the Makefile:
habi_a@MSI:/mnt/c/Users/Habi/Documents/Snake-SFML$ make
g++ -W -Wall -Wextra -Werror -O3 --std=c++14 -c -o Snake-SFML/Sources/Bonus.o Snake-SFML/Sources/Bonus.cpp
g++ -W -Wall -Wextra -Werror -O3 --std=c++14 -c -o Snake-SFML/Sources/Container.o Snake-SFML/Sources/Container.cpp
g++ -W -Wall -Wextra -Werror -O3 --std=c++14 -c -o Snake-SFML/Sources/Main.o Snake-SFML/Sources/Main.cpp
g++ -W -Wall -Wextra -Werror -O3 --std=c++14 -c -o Snake-SFML/Sources/SceneNode.o Snake-SFML/Sources/SceneNode.cpp
g++ -W -Wall -Wextra -Werror -O3 --std=c++14 -c -o Snake-SFML/Sources/SpriteNode.o Snake-SFML/Sources/SpriteNode.cpp
g++ -W -Wall -Wextra -Werror -O3 --std=c++14 -c -o Snake-SFML/Sources/World.o Snake-SFML/Sources/World.cpp
g++ -W -Wall -Wextra -Werror -O3 --std=c++14 -c -o Snake-SFML/Sources/Button.o Snake-SFML/Sources/Button.cpp
g++ -W -Wall -Wextra -Werror -O3 --std=c++14 -c -o Snake-SFML/Sources/Entity.o Snake-SFML/Sources/Entity.cpp
g++ -W -Wall -Wextra -Werror -O3 --std=c++14 -c -o Snake-SFML/Sources/MenuState.o Snake-SFML/Sources/MenuState.cpp
g++ -W -Wall -Wextra -Werror -O3 --std=c++14 -c -o Snake-SFML/Sources/SettingsState.o Snake-SFML/Sources/SettingsState.cpp
g++ -W -Wall -Wextra -Werror -O3 --std=c++14 -c -o Snake-SFML/Sources/State.o Snake-SFML/Sources/State.cpp
g++ -W -Wall -Wextra -Werror -O3 --std=c++14 -c -o Snake-SFML/Sources/Command.o Snake-SFML/Sources/Command.cpp
g++ -W -Wall -Wextra -Werror -O3 --std=c++14 -c -o Snake-SFML/Sources/GameOverState.o Snake-SFML/Sources/GameOverState.cpp
g++ -W -Wall -Wextra -Werror -O3 --std=c++14 -c -o Snake-SFML/Sources/MusicPlayer.o Snake-SFML/Sources/MusicPlayer.cpp
g++ -W -Wall -Wextra -Werror -O3 --std=c++14 -c -o Snake-SFML/Sources/Snake.o Snake-SFML/Sources/Snake.cpp
g++ -W -Wall -Wextra -Werror -O3 --std=c++14 -c -o Snake-SFML/Sources/StateStack.o Snake-SFML/Sources/StateStack.cpp
g++ -W -Wall -Wextra -Werror -O3 --std=c++14 -c -o Snake-SFML/Sources/CommandQueue.o Snake-SFML/Sources/CommandQueue.cpp
g++ -W -Wall -Wextra -Werror -O3 --std=c++14 -c -o Snake-SFML/Sources/GameState.o Snake-SFML/Sources/GameState.cpp
g++ -W -Wall -Wextra -Werror -O3 --std=c++14 -c -o Snake-SFML/Sources/PauseState.o Snake-SFML/Sources/PauseState.cpp
g++ -W -Wall -Wextra -Werror -O3 --std=c++14 -c -o Snake-SFML/Sources/SoundNode.o Snake-SFML/Sources/SoundNode.cpp
g++ -W -Wall -Wextra -Werror -O3 --std=c++14 -c -o Snake-SFML/Sources/TitleState.o Snake-SFML/Sources/TitleState.cpp
g++ -W -Wall -Wextra -Werror -O3 --std=c++14 -lsfml-graphics -lsfml-audio -lsfml-window -lsfml-system ./Snake-SFML/Sources/Bonus.o ./Snake-SFML/Sources/Container.o ./Snake-SFML/Sources/Main.o ./Snake-SFML/Sources/SceneNode.o ./Snake-SFML/Sources/SpriteNode.o ./Snake-SFML/Sources/World.o ./Snake-SFML/Sources/Button.o ./Snake-SFML/Sources/Entity.o ./Snake-SFML/Sources/MenuState.o ./Snake-SFML/Sources/SettingsState.o ./Snake-SFML/Sources/State.o ./Snake-SFML/Sources/Command.o ./Snake-SFML/Sources/GameOverState.o ./Snake-SFML/Sources/MusicPlayer.o ./Snake-SFML/Sources/Snake.o ./Snake-SFML/Sources/StateStack.o ./Snake-SFML/Sources/CommandQueue.o ./Snake-SFML/Sources/GameState.o ./Snake-SFML/Sources/PauseState.o ./Snake-SFML/Sources/SoundNode.o ./Snake-SFML/Sources/TitleState.o -o snake-sfml.out
./Snake-SFML/Sources/World.o: In function `World::snakeEatItself() const':
World.cpp:(.text+0xeb8): undefined reference to `SoundPlayer::play(Sounds::ID)'
./Snake-SFML/Sources/World.o: In function `World::snakeIsOutWorld() const':
World.cpp:(.text+0xf6a): undefined reference to `SoundPlayer::play(Sounds::ID)'
./Snake-SFML/Sources/World.o: In function `World::snakeLoose() const':
World.cpp:(.text+0xff8): undefined reference to `SoundPlayer::play(Sounds::ID)'
./Snake-SFML/Sources/World.o: In function `World::update(sf::Time)':
World.cpp:(.text+0x172a): undefined reference to `SoundPlayer::play(Sounds::ID)'
World.cpp:(.text+0x17a2): undefined reference to `SoundPlayer::play(Sounds::ID)'
./Snake-SFML/Sources/Main.o: In function `main':
Main.cpp:(.text.startup+0x42): undefined reference to `Application::Application()'
Main.cpp:(.text.startup+0x58): undefined reference to `Application::run()'
./Snake-SFML/Sources/Container.o: In function `GUI::Container::Container()':
Container.cpp:(.text+0x2e5): undefined reference to `GUI::Component::Component()'
./Snake-SFML/Sources/Container.o: In function `GUI::Container::~Container()':
Container.cpp:(.text._ZN3GUI9ContainerD0Ev[_ZN3GUI9ContainerD5Ev]+0xf0): undefined reference to `GUI::Component::~Component()'
./Snake-SFML/Sources/Container.o: In function `GUI::Container::~Container()':
Container.cpp:(.text._ZN3GUI9ContainerD2Ev[_ZN3GUI9ContainerD5Ev]+0xf6): undefined reference to `GUI::Component::~Component()'
./Snake-SFML/Sources/Container.o:(.data.rel.ro._ZTIN3GUI9ContainerE[_ZTIN3GUI9ContainerE]+0x10): undefined reference to `typeinfo for GUI::Component'
./Snake-SFML/Sources/Container.o:(.data.rel.ro._ZTVN3GUI9ContainerE[_ZTVN3GUI9ContainerE]+0x30): undefined reference to `GUI::Component::select()'
./Snake-SFML/Sources/Container.o:(.data.rel.ro._ZTVN3GUI9ContainerE[_ZTVN3GUI9ContainerE]+0x38): undefined reference to `GUI::Component::deselect()'
./Snake-SFML/Sources/Container.o:(.data.rel.ro._ZTVN3GUI9ContainerE[_ZTVN3GUI9ContainerE]+0x40): undefined reference to `GUI::Component::isActive() const'
./Snake-SFML/Sources/Container.o:(.data.rel.ro._ZTVN3GUI9ContainerE[_ZTVN3GUI9ContainerE]+0x48): undefined reference to `GUI::Component::activate()'
./Snake-SFML/Sources/Container.o:(.data.rel.ro._ZTVN3GUI9ContainerE[_ZTVN3GUI9ContainerE]+0x50): undefined reference to `GUI::Component::deactivate()'
./Snake-SFML/Sources/Button.o: In function `GUI::Button::setText(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
Button.cpp:(.text+0x171): undefined reference to `centerOrigin(sf::Text&)'
./Snake-SFML/Sources/Button.o: In function `GUI::Button::Button(State::Context)':
Button.cpp:(.text+0x1da): undefined reference to `GUI::Component::Component()'
Button.cpp:(.text+0x493): undefined reference to `GUI::Component::~Component()'
./Snake-SFML/Sources/Button.o: In function `GUI::Button::select()':
Button.cpp:(.text+0x505): undefined reference to `GUI::Component::select()'
./Snake-SFML/Sources/Button.o: In function `GUI::Button::deselect()':
Button.cpp:(.text+0x525): undefined reference to `GUI::Component::deselect()'
Button.cpp:(.text+0x533): undefined reference to `SoundPlayer::play(Sounds::ID)'
./Snake-SFML/Sources/Button.o: In function `GUI::Button::deactivate()':
Button.cpp:(.text+0x555): undefined reference to `GUI::Component::deactivate()'
Button.cpp:(.text+0x56c): undefined reference to `GUI::Component::isSelected() const'
./Snake-SFML/Sources/Button.o: In function `GUI::Button::activate()':
Button.cpp:(.text+0x5b5): undefined reference to `GUI::Component::activate()'
Button.cpp:(.text+0x60f): undefined reference to `GUI::Component::deactivate()'
Button.cpp:(.text+0x620): undefined reference to `GUI::Component::isSelected() const'
Button.cpp:(.text+0x5ed): undefined reference to `SoundPlayer::play(Sounds::ID)'
./Snake-SFML/Sources/Button.o: In function `GUI::Button::~Button()':
Button.cpp:(.text._ZN3GUI6ButtonD0Ev[_ZN3GUI6ButtonD5Ev]+0xde): undefined reference to `GUI::Component::~Component()'
./Snake-SFML/Sources/Button.o: In function `GUI::Button::~Button()':
Button.cpp:(.text._ZN3GUI6ButtonD2Ev[_ZN3GUI6ButtonD5Ev]+0xe4): undefined reference to `GUI::Component::~Component()'
./Snake-SFML/Sources/Button.o:(.data.rel.ro._ZTIN3GUI6ButtonE[_ZTIN3GUI6ButtonE]+0x10): undefined reference to `typeinfo for GUI::Component'
./Snake-SFML/Sources/Button.o:(.data.rel.ro._ZTVN3GUI6ButtonE[_ZTVN3GUI6ButtonE]+0x40): undefined reference to `GUI::Component::isActive() const'
./Snake-SFML/Sources/MenuState.o: In function `MenuState::MenuState(StateStack&, State::Context)':
MenuState.cpp:(.text+0xa43): undefined reference to `GUI::Component::~Component()'
./Snake-SFML/Sources/MenuState.o: In function `MenuState::~MenuState()':
MenuState.cpp:(.text._ZN9MenuStateD0Ev[_ZN9MenuStateD5Ev]+0xb6): undefined reference to `GUI::Component::~Component()'
./Snake-SFML/Sources/MenuState.o: In function `MenuState::~MenuState()':
MenuState.cpp:(.text._ZN9MenuStateD2Ev[_ZN9MenuStateD5Ev]+0xb4): undefined reference to `GUI::Component::~Component()'
./Snake-SFML/Sources/SettingsState.o: In function `SettingsState::handleEvent(sf::Event const&)':
SettingsState.cpp:(.text+0xe5): undefined reference to `Player::getAssignedKey(Player::Action) const'
SettingsState.cpp:(.text+0xef): undefined reference to `toString[abi:cxx11](sf::Keyboard::Key)'
SettingsState.cpp:(.text+0x102): undefined reference to `GUI::Label::setText(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
SettingsState.cpp:(.text+0x147): undefined reference to `Player::assignKey(Player::Action, sf::Keyboard::Key)'
./Snake-SFML/Sources/SettingsState.o: In function `SettingsState::updateLabels()':
SettingsState.cpp:(.text+0x1b6): undefined reference to `Player::getAssignedKey(Player::Action) const'
SettingsState.cpp:(.text+0x1c0): undefined reference to `toString[abi:cxx11](sf::Keyboard::Key)'
SettingsState.cpp:(.text+0x1d3): undefined reference to `GUI::Label::setText(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
./Snake-SFML/Sources/SettingsState.o: In function `SettingsState::addButtonLabel(Player::Action, float, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, State::Context)':
SettingsState.cpp:(.text+0x382): undefined reference to `GUI::Label::Label(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, ResourceHolder<sf::Font, Fonts::ID> const&)'
./Snake-SFML/Sources/SettingsState.o: In function `SettingsState::SettingsState(StateStack&, State::Context)':
SettingsState.cpp:(.text+0xa61): undefined reference to `Player::getAssignedKey(Player::Action) const'
SettingsState.cpp:(.text+0xa6b): undefined reference to `toString[abi:cxx11](sf::Keyboard::Key)'
SettingsState.cpp:(.text+0xa7e): undefined reference to `GUI::Label::setText(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
SettingsState.cpp:(.text+0xda6): undefined reference to `GUI::Component::~Component()'
./Snake-SFML/Sources/SettingsState.o: In function `SettingsState::~SettingsState()':
SettingsState.cpp:(.text._ZN13SettingsStateD0Ev[_ZN13SettingsStateD5Ev]+0x156): undefined reference to `GUI::Component::~Component()'
./Snake-SFML/Sources/SettingsState.o: In function `SettingsState::~SettingsState()':
SettingsState.cpp:(.text._ZN13SettingsStateD2Ev[_ZN13SettingsStateD5Ev]+0x156): undefined reference to `GUI::Component::~Component()'
./Snake-SFML/Sources/GameOverState.o: In function `GameOverState::GameOverState(StateStack&, State::Context)':
GameOverState.cpp:(.text+0x27f): undefined reference to `Player::getScore() const'
GameOverState.cpp:(.text+0x743): undefined reference to `centerOrigin(sf::Text&)'
./Snake-SFML/Sources/GameState.o: In function `GameState::update(sf::Time)':
GameState.cpp:(.text+0x37): undefined reference to `Player::setScore(unsigned int)'
GameState.cpp:(.text+0x67): undefined reference to `Player::handleRealtimeInput(CommandQueue&)'
./Snake-SFML/Sources/GameState.o: In function `GameState::handleEvent(sf::Event const&)':
GameState.cpp:(.text+0xa3): undefined reference to `Player::handleEvent(sf::Event const&, CommandQueue&)'
./Snake-SFML/Sources/PauseState.o: In function `PauseState::PauseState(StateStack&, State::Context)':
PauseState.cpp:(.text+0x365): undefined reference to `centerOrigin(sf::Text&)'
PauseState.cpp:(.text+0x92f): undefined reference to `GUI::Component::~Component()'
./Snake-SFML/Sources/PauseState.o: In function `PauseState::~PauseState()':
PauseState.cpp:(.text._ZN10PauseStateD0Ev[_ZN10PauseStateD5Ev]+0xbd): undefined reference to `GUI::Component::~Component()'
./Snake-SFML/Sources/PauseState.o: In function `PauseState::~PauseState()':
PauseState.cpp:(.text._ZN10PauseStateD2Ev[_ZN10PauseStateD5Ev]+0xbd): undefined reference to `GUI::Component::~Component()'
./Snake-SFML/Sources/SoundNode.o: In function `SoundNode::playSound(Sounds::ID, sf::Vector2<float>)':
SoundNode.cpp:(.text+0x58): undefined reference to `SoundPlayer::play(Sounds::ID, sf::Vector2<float>)'
./Snake-SFML/Sources/TitleState.o: In function `TitleState::TitleState(StateStack&, State::Context)':
TitleState.cpp:(.text+0x26a): undefined reference to `centerOrigin(sf::Text&)'
collect2: error: ld returned 1 exit status
Makefile:40: recipe for target 'snake-sfml.out' failed
make: *** [snake-sfml.out] Error 1
When trying to build the project on Debian WSL (Windows Subsystem for Linux) with the Makefile: