Некоторые файлы только для заголовков в моем проекте не могут включать «SFML / Graphics.hpp» с использованием CMake и Vscode - PullRequest
0 голосов
/ 12 ноября 2019

Я новичок в C ++ и CMake и начал большой проект. Я использую VScode как мой текстовый редактор и CMake как мой инструмент для сборки.

Проблема в том, что я могу включить "SFML / Graphics.hpp во все мои заголовочные файлы, в которых есть исходный файл с тем же именем, но в только для заголовка файлы, если я включаю «SFML / Graphics.hpp» или любой другой файл, который включает «SFML / Graphics», cmake не будет создавать и возвращает ошибку.

Вот мой код

ProjectДерево каталогов

Game|> (root)
  |- CMakeLists.txt
  |> include
  |    |- BaseComponent.hpp (Header-only)
  |    |- TransformComponent.hpp (Header-only)
  |    |- CombatComponent.hpp (Header-only)
  |    |- MovementComponent.hpp (Header-only)
  |    |- Constants.hpp (Header-only)
  |    |- TimeUtils.hpp (Header-only)
  |    |- EcsManager.hpp
  |    |- EntityManager.hpp
  |    |- Game.hpp
  |    |- GameContext.hpp (Header-only)
  |    |- Scene.hpp (Header-only)
  |    |- GameScene.hpp
  |    |- System.hpp
  |    |- Input.hpp
  |    |- MovementSystem.hpp
  |    |- RenderableSystem.hpp
  |> src
  |    |- CMakeLists.txt
  |    |- main.cpp
  |    |- Game.cpp
  |    |- EntityManager.cpp
  |    |- SceneManager.cpp
  |    |- Input.cpp
  |    |- GameScene.cpp
  |    |> Ecs
       |    |- CMakeLists.txt
       |    |- EcsManager.cpp
       |    |- System.cpp
       |    |> Systems
            |    |- CMakeLists.txt
            |    |- MovementSystem.cpp
            |    |- RenderableSystem.cpp
  |    
  |> bin
  |> build

CMakeLists.txt - Root

project(RPG)
set(CMAKE_TOOLCHAIN_FILE         
"C:/Users/dante/vcpkg/scripts/buildsystems/vcpkg.cmake")

set(EXECUTABLE_OUTPUT_PATH "${PROJECT_SOURCE_DIR}/bin")
set(SOURCES src/EntityManager.cpp src/Game.cpp src/GameScene.cpp 
src/main.cpp src/SceneManager.cpp src/Input.cpp)
include_directories("${PROJECT_SOURCE_DIR}/include")

add_subdirectory(src)

find_package(SFML 2.5.1 COMPONENTS REQUIRED graphics window system network 
audio)
find_package(nlohmann_json 3.2.0 REQUIRED)

add_executable(RPG ${SOURCES}) 
target_link_libraries(RPG sfml-graphics sfml-window sfml-system sfml- 
network sfml-audio)
target_link_libraries(RPG nlohmann_json::nlohmann_json)
target_link_libraries(RPG ECS)

CMakeLists.txt - src

add_subdirectory(Ecs)

CMakeLists.txt - Ecs

add_subdirectory(Systems)

add_library(ECS EcsManager.cpp System.cpp )

target_link_libraries(ECS ECS_SYSTEMS)

CMakeLists.txt - Системы

add_library(ECS_SYSTEMS MovementSystem.cpp RenderableSystem.cpp)

Ошибка, которую выводит Cmake: «SFML / Graphics.hpp»: нет такого файла или каталога MSVC (C1083)

Если я включаю «SFML / Graphics.hpp» в любой «любой» класс компонентов, это выдает ошибку. Если я включаю «SFML / Graphics.hpp» в файл .hpp, имеющий файл .cppсвязанный с ним и включающий этот класс в «любой» класс компонентов (или любой другой только заголовок), он выдает ошибку.

Я не могу найти никакого решения для этого в stackoverflow.

Не судите мою структуру папок, когда она впервые появилась, она была другой ... чем я изменил на это, чтобы посмотреть, будет ли собираться CMake.

...