Прежде всего, контекст. Структура моего проекта такова:
Код: Выделить всё
├── project/
│ ├── bin/
│ ├── framework/
│ │ ├── CMakeLists.txt
│ │ ├── include/
│ │ └── src/
│ ├── engine/
│ │ ├── CMakeLists.txt
│ │ ├── include/
│ │ └── src/
│ ├── core/
│ │ ├── CMakeLists.txt
│ │ ├── include/
│ │ └── src/
│ ├── vendor/
│ └── CMakeLists.txt
│ └── main.cpp
│ └── commands.h
│ └── commands.cpp
Код: Выделить всё
cmake_minimum_required(VERSION 3.31.0)
project(FrameworkLib)
set(CMAKE_CXX_FLAGS "-O3 -std=c++17 -Wall")
file(GLOB_RECURSE FRAMEWORK_SOURCES src/*.cpp)
add_library(FrameworkLib STATIC ${FRAMEWORK_SOURCES})
target_include_directories(FrameworkLib PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
)
target_link_libraries(FrameworkLib PRIVATE SDL2::SDL2 SDL2_image SDL2_mixer SDL2_net SDL2_ttf)
Код: Выделить всё
cmake_minimum_required(VERSION 3.31.0)
project(EngineLib)
set(CMAKE_CXX_FLAGS "-O3 -std=c++17 -Wall")
file(GLOB_RECURSE ENGINE_SOURCES src/*.cpp)
add_library(EngineLib STATIC ${ENGINE_SOURCES})
target_include_directories(EngineLib PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
${CMAKE_CURRENT_SOURCE_DIR}/../framework
)
target_link_libraries(EngineLib PRIVATE FrameworkLib SDL2::SDL2 SDL2_image SDL2_mixer SDL2_net SDL2_ttf)
Код: Выделить всё
cmake_minimum_required(VERSION 3.31.0) \ project(CoreLib)
set(CMAKE_CXX_FLAGS "-O3 -std=c++17 -Wall")
file(GLOB_RECURSE CORE_SOURCES src/*.cpp)
add_library(CoreLib STATIC ${CORE_SOURCES})
target_include_directories(CoreLib PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
${CMAKE_CURRENT_SOURCE_DIR}/../framework \ ${CMAKE_CURRENT_SOURCE_DIR}/../engine \ )
target_link_libraries(CoreLib PRIVATE FrameworkLib EngineLib SDL2::SDL2 SDL2_image SDL2_mixer SDL2_net SDL2_ttf)
Код: Выделить всё
cmake_minimum_required(VERSION 3.31.0)
project(Arkwright)
set(CMAKE_CXX_FLAGS "-O3 -std=c++20 -Wall")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
set(FETCHCONTENT_BASE_DIR ${CMAKE_SOURCE_DIR}/vendor)
include(FetchContent)
# SDL2
FetchContent_Declare(
SDL2
URL https://www.libsdl.org/release/SDL2-2.30.9.tar.gz
)
FetchContent_MakeAvailable(SDL2)
# SDL2_image
FetchContent_Declare(
SDL2_image
URL https://www.libsdl.org/projects/SDL_image/release/SDL2_image-2.8.2.tar.gz
)
FetchContent_MakeAvailable(SDL2_image)
# SDL2_mixer
FetchContent_Declare(
SDL2_mixer
URL https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-2.8.0.tar.gz
)
FetchContent_MakeAvailable(SDL2_mixer)
# SDL2_net
FetchContent_Declare(
SDL2_net
URL https://www.libsdl.org/projects/SDL_net/release/SDL2_net-2.2.0.tar.gz
)
FetchContent_MakeAvailable(SDL2_net)
# SDL2_ttf
FetchContent_Declare(
SDL2_ttf
URL https://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-2.22.0.tar.gz
)
FetchContent_MakeAvailable(SDL2_ttf)
add_subdirectory(core)
add_subdirectory(framework)
add_subdirectory(engine)
file(GLOB_RECURSE MAIN_SOURCES core/src/*.cpp)
add_executable(Arkwright ${MAIN_SOURCES})
target_include_directories(Arkwright PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/framework/include
${CMAKE_CURRENT_SOURCE_DIR}/engine/include
${CMAKE_CURRENT_SOURCE_DIR}/core/include
)
target_link_libraries(Arkwright PRIVATE EngineLib SDL2::SDL2 SDL2_image SDL2_mixer SDL2_net SDL2_ttf)
Код: Выделить всё
In file included from /home/yawin/Dokumentuak/Proyectos/Gamedev/Arkwright/src/engine/include/actor.h:27,
from /home/yawin/Dokumentuak/Proyectos/Gamedev/Arkwright/src/engine/src/actor.cpp:22:
/home/yawin/Dokumentuak/Proyectos/Gamedev/Arkwright/src/engine/include/sprite.h:27:10: fatal error: framework/rf_process.h: No existe el fichero o el directorio
27 | #include "framework/rf_process.h"
С другой стороны, у меня такое ощущение, что даже несмотря на то, что SDL2 и его модули загружены, когда я делаю #include это включая заголовки, которые я установил в системе. Но это всего лишь мое мнение, я не смог это проверить.
Что мне нужно изменить, чтобы это заработало?
Подробнее здесь: https://stackoverflow.com/questions/791 ... s-in-cmake
Мобильная версия