mirror of
https://github.com/Floriansylvain/SFMLplayground.git
synced 2026-08-19 11:43:24 +02:00
Initial commit
This commit is contained in:
@@ -0,0 +1,39 @@
|
|||||||
|
name: CI
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: ${{ matrix.platform.name }} ${{ matrix.config.name }}
|
||||||
|
runs-on: ${{ matrix.platform.os }}
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
platform:
|
||||||
|
- { name: Windows VS2019, os: windows-2019 }
|
||||||
|
- { name: Windows VS2022, os: windows-2022 }
|
||||||
|
- { name: Linux GCC, os: ubuntu-latest }
|
||||||
|
- { name: Linux Clang, os: ubuntu-latest, flags: -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ }
|
||||||
|
- { name: macOS, os: macos-latest }
|
||||||
|
config:
|
||||||
|
- { name: Shared, flags: -DBUILD_SHARED_LIBS=TRUE }
|
||||||
|
- { name: Static, flags: -DBUILD_SHARED_LIBS=FALSE }
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Install Linux Dependencies
|
||||||
|
if: runner.os == 'Linux'
|
||||||
|
run: sudo apt-get update && sudo apt-get install libxrandr-dev libxcursor-dev libxi-dev libudev-dev libflac-dev libvorbis-dev libgl1-mesa-dev libegl1-mesa-dev libfreetype-dev
|
||||||
|
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Configure
|
||||||
|
run: cmake -B build ${{matrix.platform.flags}} ${{matrix.config.flags}}
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: cmake --build build --config Release
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
build
|
||||||
|
out
|
||||||
|
.cache
|
||||||
|
.idea
|
||||||
|
.vs
|
||||||
|
.vscode
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.28)
|
||||||
|
project(CMakeSFMLProject LANGUAGES CXX)
|
||||||
|
|
||||||
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||||
|
|
||||||
|
include(FetchContent)
|
||||||
|
FetchContent_Declare(SFML
|
||||||
|
GIT_REPOSITORY https://github.com/SFML/SFML.git
|
||||||
|
GIT_TAG 3.0.1
|
||||||
|
GIT_SHALLOW ON
|
||||||
|
EXCLUDE_FROM_ALL
|
||||||
|
SYSTEM)
|
||||||
|
FetchContent_MakeAvailable(SFML)
|
||||||
|
|
||||||
|
add_executable(main src/main.cpp)
|
||||||
|
target_compile_features(main PRIVATE cxx_std_17)
|
||||||
|
target_link_libraries(main PRIVATE SFML::Graphics)
|
||||||
+50
@@ -0,0 +1,50 @@
|
|||||||
|
# CMake SFML Project Licenses
|
||||||
|
|
||||||
|
*This software is available under 2 licenses -- choose whichever you prefer.*
|
||||||
|
|
||||||
|
## Public Domain
|
||||||
|
|
||||||
|
This is free and unencumbered software released into the public domain.
|
||||||
|
|
||||||
|
Anyone is free to copy, modify, publish, use, compile, sell, or
|
||||||
|
distribute this software, either in source code form or as a compiled
|
||||||
|
binary, for any purpose, commercial or non-commercial, and by any
|
||||||
|
means.
|
||||||
|
|
||||||
|
In jurisdictions that recognize copyright laws, the author or authors
|
||||||
|
of this software dedicate any and all copyright interest in the
|
||||||
|
software to the public domain. We make this dedication for the benefit
|
||||||
|
of the public at large and to the detriment of our heirs and
|
||||||
|
successors. We intend this dedication to be an overt act of
|
||||||
|
relinquishment in perpetuity of all present and future rights to this
|
||||||
|
software under copyright law.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||||
|
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||||
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
## MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2022 Lukas Dürrenberger
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
@@ -0,0 +1,101 @@
|
|||||||
|
# CMake SFML Project Template
|
||||||
|
|
||||||
|
This repository template should allow for a fast and hassle-free kick start of your next SFML project using CMake.
|
||||||
|
Thanks to [GitHub's nature of templates](https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-repository-from-a-template), you can fork this repository without inheriting its Git history.
|
||||||
|
|
||||||
|
The template starts out very basic, but might receive additional features over time:
|
||||||
|
|
||||||
|
- Basic CMake script to build your project and link SFML on any operating system
|
||||||
|
- Basic [GitHub Actions](https://github.com/features/actions) script for all major platforms
|
||||||
|
|
||||||
|
## How to Use
|
||||||
|
|
||||||
|
1. Install [Git](https://git-scm.com/downloads) and [CMake](https://cmake.org/download/). Use your system's package manager if available.
|
||||||
|
2. Follow [GitHub's instructions](https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-repository-from-a-template) for how to use their project template feature to create your own project. If you don't want to use GitHub, see the section below.
|
||||||
|
3. Clone your new GitHub repo and open the repo in your text editor of choice.
|
||||||
|
4. Open [CMakeLists.txt](CMakeLists.txt). Rename the project and the target name of the executable to whatever name you want. Make sure to change all occurrences.
|
||||||
|
5. If you want to add or remove any .cpp files, change the source files listed in the `add_executable` call in CMakeLists.txt to match the source files your project requires. If you plan on keeping the default main.cpp file then no changes are required.
|
||||||
|
6. If your code uses the Audio or Network modules then add `SFML::Audio` or `SFML::Network` to the `target_link_libraries` call alongside the existing `SFML::Graphics` library that is being linked.
|
||||||
|
7. If you use Linux, install SFML's dependencies using your system package manager. On Ubuntu and other Debian-based distributions you can use the following commands:
|
||||||
|
```
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install \
|
||||||
|
libxrandr-dev \
|
||||||
|
libxcursor-dev \
|
||||||
|
libxi-dev \
|
||||||
|
libudev-dev \
|
||||||
|
libfreetype-dev \
|
||||||
|
libflac-dev \
|
||||||
|
libvorbis-dev \
|
||||||
|
libgl1-mesa-dev \
|
||||||
|
libegl1-mesa-dev \
|
||||||
|
libfreetype-dev
|
||||||
|
```
|
||||||
|
8. Configure and build your project. Most popular IDEs support CMake projects with very little effort on your part.
|
||||||
|
|
||||||
|
- [VS Code](https://code.visualstudio.com) via the [CMake extension](https://code.visualstudio.com/docs/cpp/cmake-linux)
|
||||||
|
- [Visual Studio](https://docs.microsoft.com/en-us/cpp/build/cmake-projects-in-visual-studio?view=msvc-170)
|
||||||
|
- [CLion](https://www.jetbrains.com/clion/features/cmake-support.html)
|
||||||
|
- [Qt Creator](https://doc.qt.io/qtcreator/creator-project-cmake.html)
|
||||||
|
|
||||||
|
Using CMake from the command line is straightforward as well.
|
||||||
|
Be sure to run these commands in the root directory of the project you just created.
|
||||||
|
|
||||||
|
```
|
||||||
|
cmake -B build
|
||||||
|
cmake --build build
|
||||||
|
```
|
||||||
|
|
||||||
|
9. Enjoy!
|
||||||
|
|
||||||
|
## Upgrading SFML
|
||||||
|
|
||||||
|
SFML is found via CMake's [FetchContent](https://cmake.org/cmake/help/latest/module/FetchContent.html) module.
|
||||||
|
FetchContent automatically downloads SFML from GitHub and builds it alongside your own code.
|
||||||
|
Beyond the convenience of not having to install SFML yourself, this ensures ABI compatibility and simplifies things like specifying static versus shared libraries.
|
||||||
|
|
||||||
|
Modifying what version of SFML you want is as easy as changing the `GIT_TAG` argument.
|
||||||
|
Currently it uses SFML 3 via the `3.0.0` tag.
|
||||||
|
|
||||||
|
## But I want to...
|
||||||
|
|
||||||
|
Modify CMake options by adding them as configuration parameters (with a `-D` flag) or by modifying the contents of CMakeCache.txt and rebuilding.
|
||||||
|
|
||||||
|
### Not use GitHub
|
||||||
|
|
||||||
|
You can use this project without a GitHub account by [downloading the contents](https://github.com/SFML/cmake-sfml-project/archive/refs/heads/master.zip) of the repository as a ZIP archive and unpacking it locally.
|
||||||
|
This approach also avoids using Git entirely if you would prefer to not do that.
|
||||||
|
|
||||||
|
### Change Compilers
|
||||||
|
|
||||||
|
See the variety of [`CMAKE_<LANG>_COMPILER`](https://cmake.org/cmake/help/latest/variable/CMAKE_LANG_COMPILER.html) options.
|
||||||
|
In particular you'll want to modify `CMAKE_CXX_COMPILER` to point to the C++ compiler you wish to use.
|
||||||
|
|
||||||
|
### Change Compiler Optimizations
|
||||||
|
|
||||||
|
CMake abstracts away specific optimizer flags through the [`CMAKE_BUILD_TYPE`](https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html) option.
|
||||||
|
By default this project recommends `Release` builds which enable optimizations.
|
||||||
|
Other build types include `Debug` builds which enable debug symbols but disable optimizations.
|
||||||
|
If you're using a multi-configuration generator (as is often the case on Windows), you can modify the [`CMAKE_CONFIGURATION_TYPES`](https://cmake.org/cmake/help/latest/variable/CMAKE_CONFIGURATION_TYPES.html#variable:CMAKE_CONFIGURATION_TYPES) option.
|
||||||
|
|
||||||
|
### Change Generators
|
||||||
|
|
||||||
|
While CMake will attempt to pick a suitable default generator, some systems offer a number of generators to choose from.
|
||||||
|
Ubuntu, for example, offers Makefiles and Ninja as two potential options.
|
||||||
|
For a list of generators, click [here](https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html).
|
||||||
|
To modify the generator you're using you must reconfigure your project providing a `-G` flag with a value corresponding to the generator you want.
|
||||||
|
You can't simply modify an entry in the CMakeCache.txt file unlike the above options.
|
||||||
|
Then you may rebuild your project with this new generator.
|
||||||
|
|
||||||
|
## More Reading
|
||||||
|
|
||||||
|
Here are some useful resources if you want to learn more about CMake:
|
||||||
|
|
||||||
|
- [Official CMake Tutorial](https://cmake.org/cmake/help/latest/guide/tutorial/)
|
||||||
|
- [How to Use CMake Without the Agonizing Pain - Part 1](https://alexreinking.com/blog/how-to-use-cmake-without-the-agonizing-pain-part-1.html)
|
||||||
|
- [How to Use CMake Without the Agonizing Pain - Part 2](https://alexreinking.com/blog/how-to-use-cmake-without-the-agonizing-pain-part-2.html)
|
||||||
|
- [Better CMake YouTube series by Jefferon Amstutz](https://www.youtube.com/playlist?list=PL8i3OhJb4FNV10aIZ8oF0AA46HgA2ed8g)
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
The source code is dual licensed under Public Domain and MIT -- choose whichever you prefer.
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
#include <SFML/Graphics.hpp>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
auto window = sf::RenderWindow(sf::VideoMode({1920u, 1080u}), "CMake SFML Project");
|
||||||
|
window.setFramerateLimit(144);
|
||||||
|
|
||||||
|
while (window.isOpen())
|
||||||
|
{
|
||||||
|
while (const std::optional event = window.pollEvent())
|
||||||
|
{
|
||||||
|
if (event->is<sf::Event::Closed>())
|
||||||
|
{
|
||||||
|
window.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
window.clear();
|
||||||
|
window.display();
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user