Компиляция программы SFML с помощью CMake в windows

Последние несколько дней я искал повсюду и, похоже, не могу решить эту проблему, или, может быть, я просто не понял некоторых ответов.

У меня есть приложение (точнее, игра), созданное с помощью SFML, которое мне удалось скомпилировать для Linux с версией 2.4.2. Я хочу перейти на 2.5.1 и иметь возможность компилировать в Windows, поэтому я изменил файл CMakeLists.txt на это:

cmake_minimum_required(VERSION 3.0)

# There is no real need for C++17 or 14, but I like to use up-to-date versions
if (CMAKE_MAJOR_VERSION VERSION_GREATER 3.8.0)
set(CMAKE_CXX_STANDARD 17)
else()
set(CMAKE_CXX_STANDARD 14)
endif (CMAKE_MAJOR_VERSION VERSION_GREATER 3.8.0)

if (WIN32)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Binaries/)
endif (WIN32)

# Includes
include_directories(include)

# Source files
set(SOURCE_FILES
    source/main.cpp
    source/Game.cpp
)

# Assets
set(ASSETS
    assets/Fonts/xolonium.ttf
)

# Debug Mode
project(HexDebug VERSION 1.0 LANGUAGES CXX)
set(CMAKE_BUILD_TYPE DEBUG) # This is ignored by MSVC

#SFML Package
find_package(SFML 2.5 CONFIG COMPONENTS system window graphics network audio REQUIRED)
if (SFML_FOUND)
set(SFML_STATIC_LIBRARIES TRUE)
if (WIN32)
set(SFML_USE_STATIC_STD_LIBS TRUE)
endif (WIN32)
endif (SFML_FOUND)

if (UNIX)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Binaries/Debug/)
endif (UNIX)

foreach(asset ${ASSETS})
    configure_file(${asset} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${asset} COPYONLY)
endforeach(asset)

add_executable(${PROJECT_NAME} ${SOURCE_FILES})
target_compile_options(${PROJECT_NAME} PRIVATE -g -Wall -O0 -D_DEBUG)
if (SFML_FOUND)
target_link_libraries(${PROJECT_NAME} sfml-system sfml-window sfml-graphics sfml-network sfml-audio)
endif (SFML_FOUND)

#Release Mode
project(Hex VERSION 1.0 LANGUAGES CXX)
set(CMAKE_BUILD_TYPE RELEASE) # This is ignored by MSVC

if (UNIX)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Binaries/Release/)
endif (UNIX)

foreach(asset ${ASSETS})
    configure_file(${asset} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${asset} COPYONLY)
endforeach(asset)

add_executable(${PROJECT_NAME} ${SOURCE_FILES})
target_compile_options(${PROJECT_NAME} PRIVATE "-O3")
if (SFML_FOUND)
target_link_libraries(${PROJECT_NAME} sfml-system sfml-window sfml-graphics sfml-network sfml-audio)
endif (SFML_FOUND)

Cmake работает и генерирует решение VS, которое я могу построить с помощью msbuild (обратите внимание, что я не хочу запускать Visual Studio, а использую только msbuild). Но как только я пытаюсь запустить его, он запрашивает библиотеки DLL, а я этого не хочу.

Я думал, что это будет решено путем статической компоновки (я мало знаю о статической или динамической компоновке), но она все еще требует их.

В этой ссылке они говорят, что нам больше не нужно включать $ {SFML_INCLUDE_DIR} и $ {SFML_LIBRARIES}: https://en.sfml-dev.org/forums/index.php?topic=24070.0

Как мне этого избежать? Я хочу быть полностью независимым от DLL или, по крайней мере, иметь возможность включать каталог bin, установленный из скомпилированных и установленных двоичных файлов SFML (которые я скомпилировал, а не предварительно скомпилирован).

Спасибо.

Непонятно, в чем заключается ваша проблема, о которой вы нас спрашиваете. Вы хотите статическое связывание, но оно не работает? - Необходимо указать вызов set(SFML_STATIC_LIBRARIES ON)доfind_package(). Обратите внимание, что для статического связывания с SFML вам потребуется статическая сборка самого SFLM.

Tsyvarev 27.10.2018 17:21

Как создать статическую версию?

Rynho 27.10.2018 17:27

Исходные тексты SFLM должны поставляться с README, в котором объясняется, как построить SFML статически.

Tsyvarev 27.10.2018 19:27

Я проверил, но это не так. Я не знаю, что мне делать.

Rynho 27.10.2018 23:35
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
289
0

Другие вопросы по теме