Добрый день, уважаемые товарищи.
Я написал приложения на языке программирования C++ с использованием SFML. В качестве системы сборки я использую CMake.
Непосредственно CMakeLists.txt проекта:
cmake_minimum_required(VERSION 3.25)
project(great VERSION 1.0)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_EXE_LINKER_FLAGS "-static -static-libgcc")
set(CMAKE_OPTIMIZATION "-Ofast -funroll-loops -mavx2")
set(CMAKE_DEBUG_OPTIONS "-D_GLIBCXX_DEBUG=1 -D_GLIBCXX_DEBUG_PEDANTIC=1 -D_FORTIFY_SOURCE=2")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_OPTIMIZATION} ${CMAKE_DEBUG_OPTIONS}")
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake_modules")
set(SFML_STATIC_LIBRARIES TRUE)
set(SFML_DIR "include/sfml/lib/cmake/SFML")
FILE(GLOB SRC CONFIGURE_DEPENDS src/main.cpp
src/main.hpp
src/core/engine.cpp
src/core/engine.hpp
src/config/parser.cpp
src/config/parser.hpp
src/ui/menu/menu.cpp
src/ui/menu/menu.hpp
src/ui/hud/minimap.cpp
src/ui/hud/minimap.hpp
src/ui/hud/healthbar.cpp
src/ui/hud/healthbar.hpp
)
add_executable(great ${SRC})
target_link_libraries(great PRIVATE sfml-audio sfml-graphics sfml-main sfml-network sfml-system sfml-window)
target_compile_definitions(great PRIVATE DATA_DIR="${CMAKE_SOURCE_DIR}/data/")
find_package(SFML 2.5 COMPONENTS audio graphics network system window REQUIRED)
add_custom_target(release COMMAND great)
Возникла проблема следующего характера: я собираю проект при помощи CMake, используя Clion. На выхлопе я получаю .exe файл, который могу спокойно использовать. Однако при попытке запуска на другом ПК приложение вылетает, сообщая, что оно не нашло текстуры. Текстуры оно пытается найти в той папке, в которой собирался проект.
Текстуры в проекте я подключаю, указав в CMake директорию с файлами:
target_compile_definitions(great PRIVATE DATA_DIR="${CMAKE_SOURCE_DIR}/data/")
Как мне организовать систему сборки, чтобы любой пользователь мог запустить приложения, имея .exe файл и папку data ( aka DATA_DIR ) ( В ней я храню конфиги, ассеты и др. )