在VS2017中使用SFML设置CMake

时间:2017-11-21 06:15:54

标签: c++ cmake visual-studio-2017 sfml

就像在CLion一样,我想在Visual Studio 2017中使用SFML,但我还在学习cmake,而且我不知道命令或cmake如何工作的逻辑。我刚刚看了一些帖子并得到了这个小文字。

注意:我在提供的链接中下载了最新版本的sfml,我只是删除了目录,并将CMakeLists.txt放在我的文件夹中

#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()

那件事给了我错误:

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 Studio中使用Cmake 正确设置SFML。
我不希望官方网站上的老式方法

更新
这是我的位置.... outside inside

事情是.. FindSFML.cmake脚本不起作用...
我应该移动哪些文件才能使其正常工作?

2 个答案:

答案 0 :(得分:4)

你的剧本完全没问题,除了我改变的三件事:

  • 在定义目标之前移动整个模块检测 。我非常确定您还必须在之前定义包含目录。

  • 您的if(SFML_FOUND)括号目前毫无意义,因为您已经设置了SFML,这意味着它永远不会超过find_package(),除非找到它

  • -std=c++11是仅GCC标志(除非另有说明,否则MSVC将始终使用最新标准)。因此,您必须在此检查编译器或使用CMAKE_CXX_STANDARD

所以"清洁" CMakeLists.txt可能如下所示:

#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使用CMake变量SFML_ROOT或环境变量找到它的位置。同名。

因此,当您第一次调用CMake时,它看起来像这样:

cmake -G "Visual Studio 15 2017" -DSFML_ROOT=path/to/sfml path/to/source

答案 1 :(得分:2)

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

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文件夹中设置SFML_DIR var。