фатальная ошибка: файл SFML / System.hpp 'не найден - PullRequest
0 голосов
/ 03 мая 2019

Я пытаюсь работать с SMFL, CMAKE & VSCode. Cmake не может связать эти файлы SFML. Я устанавливаю SFML и CMake, используя Homebrew.

Я попытался включить файлы SFML с SMFL_ROOT & SFML_INCLUDE_DIR, но безрезультатно.

cmake_minimum_required(VERSION 3.14.2)
project(WordTypeCpp VERSION 0.1.0 )

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
set(CMAKE_CXX_STANDARD 17)

find_package(SFML REQUIRED COMPONENTS graphics system)
if (SFML_FOUND)
    set(SFML_ROOT "/usr/local/Cellar/sfml/2.5.1/include/SFML/")
# include_directories(${SFML_INCLUDE_DIR} "/usr/local/Cellar/sfml/2.5.1/include")
endif(SFML_FOUND)

set(SOURCE_FILES Main.cpp)
add_executable(Main ${SOURCE_FILES})

target_link_libraries(Main ${SFML_LIBRARIES})

add_definitions(-include ${CMAKE_CURRENT_SOURCE_DIR}/PCH.hpp)

include(CPack)

Мой Main.cpp файл

#include "PCH.hpp"
#include "Main.hpp"

int main()
{
    std::cout << "SFML is running!" << '\n';

    sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
#ifdef SFML_SYSTEM_WINDOWS
    __windowsHelper.setIcon(window.getSystemHandle());
#endif

    sf::CircleShape shape(window.getSize().x / 2);
    shape.setFillColor(sf::Color::White);

    sf::Texture shapeTexture;
    shapeTexture.loadFromFile("content/sfml.png");
    shape.setTexture(&shapeTexture);

    sf::Event event;

    while (window.isOpen())
    {
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        window.clear();
        window.draw(shape);
        window.display();
    }

    return 0;
}
// PCH.hpp file
#include <SFML/System.hpp>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>
#include <SFML/Network.hpp>

--config Debug --target Main -- -j 6
[build] [1/2  50% :: 1.825] Building CXX object src/CMakeFiles/Main.dir/Main.cpp.o
[build] FAILED: src/CMakeFiles/Main.dir/Main.cpp.o 
[build] /usr/bin/clang++    -g -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk   -include /Users/.../WordTypeCpp/src/PCH.hpp -std=gnu++1z -MD -MT src/CMakeFiles/Main.dir/Main.cpp.o -MF src/CMakeFiles/Main.dir/Main.cpp.o.d -o src/CMakeFiles/Main.dir/Main.cpp.o -c ../src/Main.cpp
[build] In file included from <built-in>:1:
[build] /Users/.../WordTypeCpp/src/PCH.hpp:11:10: fatal error: 'SFML/System.hpp' file not found
[build] #include <SFML/System.hpp>
[build]          ^~~~~~~~~~~~~~~~~
[build] 1 error generated.
[build] ninja: build stopped: subcommand failed.
[build] Build finished with exit code 1

1 Ответ

1 голос
/ 03 мая 2019

Ошибка лежит в этой строке:

target_link_libraries(Main ${SFML_LIBRARIES})

Это не будет правильно распространять требования. Он будет связывать только библиотеки sfml. Обычно вам также нужны другие требования, такие как включение каталогов.

Вместо этого вы должны ссылаться на цели, экспортируемые sfml:

target_link_libraries(Main PRIVATE sfml-graphics sfml-system)

Также вам это не нужно:

# uneeded
if (SFML_FOUND)
    set(SFML_ROOT "/usr/local/Cellar/sfml/2.5.1/include/SFML/")
    # include_directories(${SFML_INCLUDE_DIR} "/usr/local/Cellar/sfml/2.5.1/include")
endif(SFML_FOUND)
...