本文主要介绍,如何使用SFML库, 并根据SFML-Essential这本书,创建一个简单的Demo, 该Demo 主要能够使用SFML库创建一个简单的窗口.
如果想继续阅读本文,请先看<<初探SFML >>一文,在本文中,你将了解SFML是什么, 以及从什么地方下拉其源码. 编译之后的SFML会输出 其sdk, 目录如下:
|SFML_SDK
|--|include // 这里主要存放了SFML Sdk的所有头文件
|--|--|*.h
|--|lib // 这里主要存放了SFML Sdk的所有库文件
|--|--|*.so
|--|share
|--|--|cmake //这里存放了.cmake文件,主要帮助我们使用cmake寻找到SFML的库
在继续阅读之前,可以下载SFML Essentials 一书, 本文所做的所有Demo 代码均来自于本书
我们在与SFML_SDK同一个目录下创建一个文件夹叫做 SFML_TUTORIALS,之所以要创建这个文件夹,是因为我们需要创建一系列的demo.
在SFML_TUTORIALS文件夹下,创建地一个文件夹: 1.HelloSFML
该文件夹下新建,两个文件: main.cc, CMakeLists.txt
首先,在main.cc里,我们创建一个sfml::Window实例,并测试一下与这个窗口相关的事件交互. 我们还需要用CMake来构建我们编译, 如何对CMake不太熟悉,请参考 <<跨平台编译的经验之谈--cmake编译文件的一般方法>> .
因此,在CMakeLists.txt里,我们先指定CMakeLists.txt的版本, 然后创建一个工程,该工程即是我们项目的工程 NV3D_SFML,也是CMake进行编译的工程.
cmake_minimum_required(VERSION 3.0.2)
project(NV3D_SFML)
然后,我们添加我们需要编译的目标文件,cmake将main.cc编译成该目标所表示的可执行文件,在ubuntu平台上的构建可执行文件如下:
set(SOURCE_FILES main.cc)
add_executable(Hello_SFML ${SOURCE_FILES})
接着,由于我们需要使用SFML库, 因此需要在CMake里包含该库的头文件以及链接其库
set(SFML_SDK "${CMAKE_CURRENT_SOURCE_DIR}/../../SFML_SDK")
find_path(SFML_INCLUDE_DIR_SYSTEM_H NAMES System.hpp PATHS /usr/include /usr/local/include ${SFML_SDK}/include/SFML/)
find_library(SFML_SYSTEM_LIBRARY NAMES sfml-system PATHS /usr/lib /usr/local/lib ${SFML_SDK}/lib)
find_library(SFML_WINDOW_LIBRARY NAMES sfml-window PATHS /usr/lib /usr/local/lib ${SFML_SDK}/lib)
find_library(SFML_GRAPHIC_LIBRARY NAMES sfml-graphics PATHS /usr/lib /usr/local/lib ${SFML_SDK}/lib)
set(SFML_LIBRARIES ${SFML_SYSTEM_LIBRARY} ${SFML_WINDOW_LIBRARY} ${SFML_GRAPHIC_LIBRARY})
set(SFML_INCLUDE_DIR ${SFML_INCLUDE_DIR_SYSTEM_H}/../)
if(SFML_INCLUDE_DIR)
include_directories(${SFML_INCLUDE_DIR})
endif()
if(SFML_LIBRARY)
target_link_libraries(Hello_SFML${SFML_LIBRARIES})
endif()
其中,CMAKE_CURRENT_SOURCE_DIR是当前所被编译的文件main.cc所在的路径,SFML_SDK是SFML sdk的文件夹.
find_path -- 是CMake命令, 主要是得到某个文件的所在路径,它有三个选项必须要写上:1 SFML_INCLUDE_DIR_SYSTEM_H 它表示这条命令执行后,最终要返回的值, 2 NAMES
,它表示我们要找的文件名,3PATHS 它表示我们寻找该文件的寻找路径,可以是多个
find_library-- 是CMake命令,主要是找到某个库的所在路径,它与find_path一样有三个选项必须要写上,使用也与find_path一样
最后,调用include_directories 和 target_link_libraries 即可.
关于 main.cc如何创建窗口,请参考 源码 : https://github.com/wangcan26/Sfml_Essential_Tutorials
网友评论