美文网首页CMake
CMake实战--链接SFML并使用

CMake实战--链接SFML并使用

作者: NVision | 来源:发表于2017-09-15 18:41 被阅读52次

本文主要介绍,如何使用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 

相关文章

网友评论

    本文标题:CMake实战--链接SFML并使用

    本文链接:https://www.haomeiwen.com/subject/gklesxtx.html