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, you can fork this repository without inheriting its Git history.
The template starts out very basic, but might receive additional features over time:
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.sfml-audio
or sfml-network
to the target_link_libraries
call alongside the existing sfml-graphics
library that is being linked.sudo apt update
sudo apt install \
libxrandr-dev \
libxcursor-dev \
libudev-dev \
libfreetype-dev \
libopenal-dev \
libflac-dev \
libvorbis-dev \
libgl1-mesa-dev \
libegl1-mesa-dev
Configure and build your project. Most popular IDEs support CMake projects with very little effort on your part.
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
SFML is found via CMake's FetchContent 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 compatability 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 the latest in-development version of SFML 2 via the 2.6.x
tag.
If you're feeling adventurous and want to give SFML 3 a try, use the master
tag.
Beware, this requires changing your code to suit the modified API!
The nice folks in the SFML community can help you with that transition and the bugs you may encounter along the way.
Modify CMake options by adding them as configuration parameters (with a -D
flag) or by modifying the contents of CMakeCache.txt and rebuilding.
See the variety of CMAKE_<LANG>_COMPILER
options.
In particular you'll want to modify CMAKE_CXX_COMPILER
to point to the C++ compiler you wish to use.
CMake abstracts away specific optimizer flags through the CMAKE_BUILD_TYPE
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
option.
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.
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.
Here are some useful resources if you want to learn more about CMake:
The source code is dual licensed under Public Domain and MIT -- choose whichever you prefer.