Как собрать приложение на языке программирования C++, используя CMake?

Добрый день, уважаемые товарищи.
Я написал приложения на языке программирования 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 ) ( В ней я храню конфиги, ассеты и др. )
  • Вопрос задан
  • 214 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Как мне организовать систему сборки, чтобы любой пользователь мог запустить приложения, имея .exe файл и папку data ( aka DATA_DIR )

Для этого нужно научить приложение находить папку data. Сейчас ты, похоже, используешь полный путь из DATA_DIR. Возможно ты хочешь искать data относительно положения исполняемого файла. Это должно быть в логике приложения, я не вижу, как тебе может помочь система сборки, если пользователи не будут пересобирать приложение.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы