Welcome, Guest. Please login or register. Did you miss your activation email?

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - MypkaXD

Pages: [1]
1
General / SFML, ImGui and SFML-ImGui with CMake
« on: September 22, 2023, 04:26:39 pm »
Hello! I have some problems with linking ImGui, SFML and SFML-ImGui for my project.
My project contain main CMakeLists.txt, .gitsubmodule, folders: include for including headers which i wrote, source for cpp-files and libs (Photo: SFML1). Libs are contain SFML, ImGui, SFML-ImGui folders and second CMakeLists.txt (Photo SFML2).
Main CMakeLists.txt:
cmake_minimum_required(VERSION 3.2) # Min version CMake

set(CMAKE_CXX_STANDARD 17)            
set(CMAKE_CXX_STANDARD_REQUIRED ON)

project(Dynamic_2
        VERSION 1.0
        LANGUAGES C CXX
)

add_executable(Dynamic_2 ${CMAKE_CURRENT_SOURCE_DIR}/source/Dynamic_2.cpp)

target_include_directories(
  Dynamic_2                          
  PUBLIC                              
  ${CMAKE_CURRENT_SOURCE_DIR}/include
)

add_subdirectory(${CMAKE_SOURCE_DIR}/libs)

target_link_libraries(Dynamic_2 PUBLIC Libs)
 
CMakeLists.txt from libs:
# ImGui
add_library(Libs STATIC
        ${CMAKE_SOURCE_DIR}/libs/ImGui/imgui.cpp
        ${CMAKE_SOURCE_DIR}/libs/ImGui/imgui_demo.cpp
        ${CMAKE_SOURCE_DIR}/libs/ImGui/imgui_draw.cpp
        ${CMAKE_SOURCE_DIR}/libs/ImGui/imgui_tables.cpp
        ${CMAKE_SOURCE_DIR}/libs/ImGui/imgui_widgets.cpp
)
target_include_directories(Libs PUBLIC ${CMAKE_SOURCE_DIR}/libs/ImGui)

# SFML
set(CMAKE_BUILD_TYPE "RelWithDebInfo")
set(SFML_USE_STATIC_STD_LIBS ON)
set(SFML_BUILD_NETWORK ON)
set(SFML_BUILD_WINDOW ON)
set(SFML_BUILD_GRAPHICS ON)
set(SFML_BUILD_AUDIO ON)
set(SFML_BUILD_DOC OFF)
set(SFML_BUILD_EXAMPLES OFF)
set(SFML_DIR ${CMAKE_CURRENT_SOURCE_DIR}/SFML)

add_subdirectory(${CMAKE_SOURCE_DIR}/libs/SFML)

# find_package(SFML 2.6.0 COMPONENTS network window graphics audio)

target_include_directories(Libs PUBLIC ${CMAKE_SOURCE_DIR}/libs/SFML/include)
target_link_libraries(Libs sfml-network sfml-window sfml-graphics sfml-audio)

set(IMGUI_SFML_FIND_SFML OFF)
set(IMGUI_SFML_IMGUI_DEMO ON)
set(IMGUI_DIR ${CMAKE_SOURCE_DIR}/libs/ImGui)
set(SFML_DIR ${CMAKE_SOURCE_DIR}/libs/SFML/cmake)

add_subdirectory(${CMAKE_SOURCE_DIR}/libs/ImGui-SFML)

#target_sources(Libs PUBLIC
#        ${CMAKE_SOURCE_DIR}/libs/ImGui-SFML/imgui-SFML.cpp
#)

target_include_directories(Libs PUBLIC ${CMAKE_SOURCE_DIR}/libs/ImGui-SFML)
 
So it's working. I can build this. But!
When i compiled this i got some mistakes (Photo Mistakes)
And i don't know how to fix it. I looked many articles about it but can't to solve.
Libs which i'm using:
1)Latest ImGui: https://github.com/ocornut/imgui/tree/d6360c1ba9934e18ea46913a9e6f3f888a2521b8
2) Latest ImGuiSFML: https://github.com/SFML/imgui-sfml/tree/6bd43671d3fab76f94b1f0877d943d8cc3b34c3b
3) Latest SFML: https://github.com/SFML/SFML/tree/ff5eaca6a2219a5c172030df27b56b4d78f6ee91

If someone helps me I will be glad.

Now i'm using other version of libs and it's working (found this way):
New CMakeLists.txt from folder libs:
include(FetchContent)

set(SFML_VERSION 2.5.1)
set(IMGUI_VERSION 1.87)
# set(IMGUI_SFML_VERSION 2.3)

# It's nice to get stripped-down release zips instead of cloning
# a repo and checking out a tag
FetchContent_Declare(
  SFML
  URL "https://github.com/SFML/SFML/archive/${SFML_VERSION}.zip"
)

FetchContent_Declare(
  imgui
  URL "https://github.com/ocornut/imgui/archive/v${IMGUI_VERSION}.zip"
)

# Or by tag...
FetchContent_Declare(
  imgui-sfml
  GIT_REPOSITORY https://github.com/SFML/imgui-sfml.git
  GIT_TAG        2.6.x
  # GIT_COMMIT 5f54b69b6aee18db846c81633f86f78c2586dded
  # ^ or like this - sometimes it's better because FetchContent won't look
  # into remote to see if branch head was updated or not - good for stable
  # tags like 'vX.X' corresponding to releases
)

## finally, let's build

# SFML
option(SFML_BUILD_AUDIO "Build audio" OFF)
option(SFML_BUILD_NETWORK "Build network" OFF)
FetchContent_MakeAvailable(sfml)

# Dear ImGui
FetchContent_MakeAvailable(imgui)

# ImGui-SFML
set(IMGUI_DIR ${imgui_SOURCE_DIR})
option(IMGUI_SFML_FIND_SFML "Use find_package to find SFML" OFF)
option(IMGUI_SFML_IMGUI_DEMO "Build imgui_demo.cpp" ON)

FetchContent_MakeAvailable(imgui-sfml)
New CMakeLists.txt Main:
cmake_minimum_required(VERSION 3.2) # Min version CMake

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
project(Dynamic_2
        VERSION 1.0
        LANGUAGES C CXX
)

add_executable(Dynamic_2 ${CMAKE_CURRENT_SOURCE_DIR}/source/Dynamic_2.cpp)

target_include_directories(
  Dynamic_2
  PUBLIC
  ${CMAKE_CURRENT_SOURCE_DIR}/include
)

set(BUILD_SHARED_LIBS OFF)

add_subdirectory(${CMAKE_SOURCE_DIR}/libs)

target_link_libraries(Dynamic_2
  PUBLIC
    ImGui-SFML::ImGui-SFML
)

I want to understand why my way isn't working. Sorry if i made mistakes (english not my native language) and for design mistakes.

Pages: [1]
anything