在 VS2017 中使用 SFML 安装 CMake
Setup CMake with SFML in VS2017
就像在 CLion 中一样,我想在 Visual Studio 2017 中使用 SFML,但我仍在学习 cmake,我根本不知道 cmake 的命令或工作逻辑.我刚刚看了一些帖子,得到了这个小脚本。
注意:我在提供的link中下载了最新版本的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
不想官网的老套方法
更新
这是我的位置....
问题是..FindSFML.cmake
脚本不工作...
我应该移动哪些文件才能使其正常工作?
您的脚本非常好,除了我要更改的三处内容:
在定义目标之前移动整个模块检测。我很确定您之前还必须定义包含目录。
你的 if(SFML_FOUND)
括号现在毫无意义,因为你已经将 SFML 设置为必需,这意味着它永远不会超过 find_package()
除非找到它。
-std=c++11
是 GCC 专用标志(MSVC 将始终使用最新标准,除非另有说明)。因此,您必须在此处检查编译器或使用 CMAKE_CXX_STANDARD
.
所以 "cleaned" 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 变量 SFML_ROOT
或同名环境变量告诉 CMake 在哪里找到它。
所以第一次调用 CMake 时,它可能看起来像这样:
cmake -G "Visual Studio 15 2017" -DSFML_ROOT=path/to/sfml path/to/source
这就是您在 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_DIR var 设置为您的 sfml 文件夹。
就像在 CLion 中一样,我想在 Visual Studio 2017 中使用 SFML,但我仍在学习 cmake,我根本不知道 cmake 的命令或工作逻辑.我刚刚看了一些帖子,得到了这个小脚本。
注意:我在提供的link中下载了最新版本的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
不想官网的老套方法
更新
这是我的位置....
问题是..FindSFML.cmake
脚本不工作...
我应该移动哪些文件才能使其正常工作?
您的脚本非常好,除了我要更改的三处内容:
在定义目标之前移动整个模块检测。我很确定您之前还必须定义包含目录。
你的
if(SFML_FOUND)
括号现在毫无意义,因为你已经将 SFML 设置为必需,这意味着它永远不会超过find_package()
除非找到它。-std=c++11
是 GCC 专用标志(MSVC 将始终使用最新标准,除非另有说明)。因此,您必须在此处检查编译器或使用CMAKE_CXX_STANDARD
.
所以 "cleaned" 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 变量 SFML_ROOT
或同名环境变量告诉 CMake 在哪里找到它。
所以第一次调用 CMake 时,它可能看起来像这样:
cmake -G "Visual Studio 15 2017" -DSFML_ROOT=path/to/sfml path/to/source
这就是您在 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_DIR var 设置为您的 sfml 文件夹。