我的项目中某些仅标头文件不能包含使用 CMake 和 Vscode 的"SFML/Graphics.hpp"



我是C++和CMake的新手,开始了一个大项目。我使用VScode作为我的文本编辑器,使用CMake作为我的构建工具。

问题是,如果我包括"SFML/Graphics.hpp"或任何其他包含"SFML/Graphics"的文件,我可以在所有具有相同名称的源文件的头文件中包括"SFML/Graphics.hpp,但在header-only文件中,cmake不会构建并返回错误

这是我的代码

项目目录树

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-根

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(

如果我在任何"any"组件类中包含"SFML/Graphics.hpp",则会出现错误如果我在一个.hpp文件中包含"SFML/Graphics.hpp",而该文件有一个与其关联的.cpp文件,并且在"任何"组件类(或仅任何其他标头(中包含该类,则会出现错误。

我找不到解决这个问题的办法。

不要判断我的文件夹结构,当错误第一次出现时,它是不同的。。。然后我改成那个,看看CMake是否会构建。

您需要将SFML include目录添加到include目录列表中。

之后

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

添加行

include_directories(${SFML_INCLUDE_DIR})

最新更新