为了对机器有更好的了解,提高我的C ++编程技能并提出挑战,我决定做出一些我非常努力的工作:安装一个库并开始对其进行编码。
不幸的是,我没有使用cmake
make
和安装开发包来编译东西的大量资源。 但是我设法使用各种资源来做到这一点,特别是SFML网站,Stack Overflow和CMake文档。
计划
我们将下载SFML 2.5.1源代码,进行编译,将它们安装在合适的位置,然后启动一个微型SFML程序以确保其工作。
下载库
为了编译SFML,您将需要一些库:
- freetype:字体引擎渲染字体
- x11:Linux中使用的X窗口库
- xrandr:用于管理显示信息(如屏幕分辨率)的lib
- udev:外围设备管理器(用于处理键盘,鼠标等)
- opengl:一种非常流行(可能是最流行)的图形规范。 默认安装(libOpenGL)
- flac:音频格式
- ogg:音频格式
- vorbis:音频格式
- 开放式:3D音频引擎
- pthread:POSIX线程的Linux实现(用于多线程)
我发现默认情况下安装了OpenGL,x11和pthreads。 给其他人的命令是:
sudo apt install libfreetype6-dev libxrandr-dev libudev-dev libogg-dev libflac-dev libvorbis-dev libopenal-dev
下载资源
现在,您必须下载源。 去把它们放在这里。
编译源
现在是时候掌握我们的CMake技能了。
首先使用默认安装的unzip
下载的源,然后进入目录。
cd〜/下载
解压缩SFML-2.5.1-sources.zip
光盘SFML-2.5.1
现在,您可以使用cmake创建makefile。
cmake -DCMAKE_INSTALL_PREFIX=~/Downloads/SFML-2.5.1-Compiled
它将创建预期的Makefile,该Makefile将创建已编译的文件,并将其放入您的Downloads/SFML-2.5.1-Compiled
目录中。
完成后,就该这样做了。
使
进行安装
一旦完成,做得好! 您已经成功编译了SFML,可以在Downloads/SFML-2.5.1-Compiled
目录中找到它。
提示 :您应该将此文件夹移动到其他位置,因为您的项目将直接依赖于该文件夹。 为了练习,我将其放在/home/rewieer/Libraries/SFML-2.5.1中 。 这是我从现在开始将使用的路径。
创建项目
使用C ++在CLion中创建一个新项目。 完成后,我们将不得不调整此CMakeLists。 输入以下内容。
cmake_minimum_required(版本3.13)
项目(SFMLApp)
设置(CMAKE_CXX_STANDARD 14)
设置(SFML_INCLUDE_DIR“ /home/rewieer/Libraries/SFML-2.5.1/include”)
设置(SFML_LIBRARY_DIR“ /home/rewieer/Libraries/SFML-2.5.1/lib”)
设置(SFML_DIR“ /home/rewieer/Libraries/SFML-2.5.1/lib/cmake/SFML”)
链接目录(SFML_LIBRARY_DIR)
include_directories(SFML_INCLUDE_DIR)
find_package(SFML 2.5.1 COMPONENTS系统窗口图形网络音频)
如果 (SFML_FOUND)
消息(状态“ SFML_INCLUDE_DIR:$ {SFML_INCLUDE_DIR}”)
消息(状态“ SFML_LIBRARIES:$ {SFML_LIBRARIES}”)
消息(状态“ SFML_VERSION:$ {SFML_VERSION}”)
endif ()
add_executable(SFMLApp main.cpp)
target_link_libraries(SFMLApp sfml-graphics sfml-window sfml-system)
让我们来看看这个
- cmake_minimum_required :这只是cmake设置其要求
- project :这是您的项目的名称。 在这里,我将其称为SFMLApp。 适应您的项目 。
- set :设置将在文件中使用的变量。 您可以根据需要命名,只要它们与文件中使用的标识符相同即可。 在这里,我们设置三个重要的参数:SFML_INCLUDE_DIR,SFML_LIBRARY_DIR和SFML_DIR。 确保它们指向的路径与您的设置相匹配 。
- link_directory :这将告诉链接器在哪里找到所需库的目录
- include_directory :相同,但包含(您知道,那些.hpp文件)
- find_package:这是非常重要的一行,因为它将有效地搜索包(假设它具有cmake)并将其导入到项目中。 在COMPONENTS之后,我们提到要加载的组件。
- SFML_FOUND :定义是否通过cmake找到该库,在这种情况下它将显示一条消息。 您应该在cmake选项卡中看到它。
- add_executable :在这里告诉cmake您要编译的所有.cpp文件
- target_link_libraries :这将告诉cmake将项目与最终可执行文件中的SFML链接
让我们进行测试。 将以下代码放入main.cpp
:
#include
int main()
{
sf :: RenderWindow窗口(sf :: VideoMode(200,200),“ SFML正常!”);
sf :: CircleShape shape(100.f);
shape.setFillColor(sf :: Color :: Green);
同时 (window.isOpen())
{
sf :: Event事件;
同时 (window.pollEvent(event))
{
如果 (event.type == sf :: Event :: 已关闭 )
window.close();
}
window.clear();
window.draw(shape);
屏幕显示();
}
返回 0;
}
现在,您可以单击该编译按钮,如果一切正常,则可以看到以下结果。

恭喜你! 您现在拥有一个正常工作的SFML工作站。
玩得开心 !