Компиляция SFML-программы с CMake на Windows - PullRequest
0 голосов
/ 27 октября 2018

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

У меня есть приложение (точнее, игра), построенное на 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 (которые я скомпилировал, а не предварительно скомпилированные).

Спасибо.

...