首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用SFML在CMake中安装VS2017

用SFML在CMake中安装VS2017
EN

Stack Overflow用户
提问于 2017-11-21 06:15:54
回答 2查看 6.3K关注 0票数 4

就像在CLion中一样,我想在VisualStudio2017中使用SFML,但我仍然在学习cmake,我根本不知道cmake的命令或逻辑。我刚看了一些帖子,得到了这个小剧本。

注意:我在提供的链接中下载了sfml的最新版本,我只获取了解压目录,并将其与CMakeLists.txt放在我的文件夹中。

代码语言:javascript
复制
#sets up the minimum version of cmake
cmake_minimum_required(VERSION 3.9)

#how the project will be called
project (space_impact)

#set c++11 standard
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" -std=c++11)

#set source files
set (SOURCE_FILES main.cpp)

#we add the executable of the program
add_executable (space_impact ${SOURCE_FILES})

#taked from a mac-clion tutorial, doesn't work
set (CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/SFML/cmake-modules/")
find_package (SFML REQUIRED system window graphics network audio)
if (SFML_FOUND)
    include_directories(${SFML_INCLUDE_DIR})
    target_link_libraries(space_impact ${SFML_LIBRARIES})
endif()

那东西让我犯了错误:

代码语言:javascript
复制
Error       CMake Error at SFML/cmake-modules/FindSFML.cmake:355 (message):
  Could NOT find SFML (missing: SFML_SYSTEM_LIBRARY SFML_WINDOW_LIBRARY
  SFML_GRAPHICS_LIBRARY SFML_NETWORK_LIBRARY SFML_AUDIO_LIBRARY)        SFML/cmake-modules/FindSFML.cmake       

我希望一切都充满活力,但我不知道该怎么做.

因此,我的问题是,如何在Visual中使用正确设置SFML。

我不想在官方网站上使用老式的方法

更新

这是我的位置..。

问题是..。FindSFML.cmake脚本不起作用..。

我应该移动哪些文件以使其正常工作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-21 08:17:55

您的脚本非常好,除了我要修改的三件事:

  • 将整个模块检测移动到定义目标之前。我非常肯定,您之前还必须定义包含目录。
  • 您的if(SFML_FOUND)括号现在非常没有意义,因为您已经将SFML设置为required,这意味着除非找到SFML,否则它将永远无法通过find_package()
  • -std=c++11是GCC唯一的标志(除非指定,否则MSVC将始终使用最新标准)。因此,您必须在这里检查编译器或使用CMAKE_CXX_STANDARD

所以“清洗”的CMakeLists.txt看起来可能是这样的:

代码语言:javascript
复制
#sets up the minimum version of cmake
cmake_minimum_required(VERSION 3.9) # personally I'd set this version as low as required; you don't have to require the cutting edge version

#how the project will be called
project (space_impact)

#set the C++ standard to be used
set (CMAKE_CXX_STANDARD 11)

#set source files
set (SOURCE_FILES main.cpp)

#look for SFML and add it
set (CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/SFML/cmake-modules/")
find_package (SFML REQUIRED system window graphics network audio)

include_directories(${SFML_INCLUDE_DIR})

#we add the executable of the program
add_executable (space_impact ${SOURCE_FILES})
target_link_libraries(space_impact ${SFML_LIBRARIES} ${SFML_DEPENDENCIES})

注意,将SFML_DEPENDENCIES添加到库列表是可选的,除非您使用的是静态版本的SFML。

但是你的SFML问题呢?由于默认情况下没有在任何目录中安装SFML文件,因此必须使用CMake变量SFML_ROOT或同名的环境变量告诉CMake在哪里找到它。

因此,当您第一次调用CMake时,它可能如下所示:

代码语言:javascript
复制
cmake -G "Visual Studio 15 2017" -DSFML_ROOT=path/to/sfml path/to/source
票数 5
EN

Stack Overflow用户

发布于 2020-10-08 03:19:14

这就是在cmake项目中编译sfml所需的全部内容。

代码语言:javascript
复制
find_package(SFML 2.5.1 COMPONENTS system graphics audio network REQUIRED)
add_executable (AwesomeProject "AwesomeProject.cpp" "AwesomeProject.h")
target_link_libraries(AwesomeProject PRIVATE sfml-audio sfml-graphics sfml-network sfml-system)

还将SFML_DIR var设置为sfml文件夹。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47406388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档