SFML community forums
General => General discussions => Topic started by: MS07112 on July 20, 2017, 12:54:19 pm
-
:D Hello Everyone,
I have been trying to successfully compile and run the SFML HelloWorld program in CLion, but was constantly bombarded by CMake linker errors and other problems.
Thankfully though, I have been able to modify the CMake and other settings to get the CLion IDE to successfully compile and run the executable. And have now uploaded the whole project folder to my GitHub so that users trying to develop SFML with CLion can get started easily.
Here's the GitHub page:
https://github.com/MS07112/CLion_SFML_HelloWorld (https://github.com/MS07112/CLion_SFML_HelloWorld)
YouTube video about the CLion project:
https://www.youtube.com/watch?v=SbBz_94bk1Y&feature=youtu.be (https://www.youtube.com/watch?v=SbBz_94bk1Y&feature=youtu.be)
This project was done on an Arch-based Linux OS (Manjaro 17.0.2 Gellivara), using the CLion package from the AUR (Arch User Repository).
CPU Architecture: x86_64
Linux Kernel: 4.9.37
Thanks!
-
Hard coding where GCC and G++ are located isn't a very good idea.
For one it's not portable and otherwise CLion should find those when you properly setup the toolchain.
Alternatively you can just set them by editing the cache file, so it works for your local installation and isn't hard coded into your CMake project file.
The order you're requesting the SFML libraries is wrong. It should be like when you're linking libraries manually. I just use the "depends on"-rule, so sfml-graphics "depends on" sfml-window "depends on" sfml-system, so the order should be graphics, window and system (audio and network only depend on sfml-system).
I wouldn't mix project name and executable name. When you're linking a library you need to pass it the project name and not the executable name.
Additionally I recommend you also add ${SFML_DEPENDENCIES} after ${SFML_LIBRARIES} just in case you ever want to link statically, so you already link the potential SFML dependencies.
A while ago I've used CLion for the Ludum Dare game jam, so if you want, you can also check out the CMake file (https://github.com/eXpl0it3r/OneRoom/blob/master/CMakeLists.txt) I created back then. It's not perfect and I just force static linking as I was developing on Windows, but maybe you see one or the other thing.
-
Thank you very much for the advice on CMake, as I'm still very new to its usage.
I tried to use the invocation order listed in the example file you linked, but unfortunately the compiler/linker/??? freaked out (again) and told me this time that it couldn't find SFML. I went back to the old order (which was based on someone's StackOverflow post -- see my GitHub page's README for the link) and it worked (I have no clue).
TBH: I have a limited understanding as to what is going on with CMake, and am basically 'walking on eggshells' whilst hoping that the compiler will have mercy on me and let me write a simple HelloWorld program so I can start learning SFML (instead of how to debug whatever terrible creature lies beneath the IDE ;D).
The CMake file should definitely be fixed up, but I'm not versed enough in its usage to know what to do. I'd definitely be thankful if someone could write and upload a suitable example project; as that's what I've been after this whole time.
Thanks
-
Here is a cleaner version of the CMakeLists.txt file:
cmake_minimum_required(VERSION 3.7)
project(Game)
set(CMAKE_CXX_STANDARD 11)
set(SOURCE_FILES main.cpp)
add_executable(Game ${SOURCE_FILES})
# Detect and add SFML
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules" ${CMAKE_MODULE_PATH})
find_package(SFML 2 REQUIRED system window graphics network audio)
if(SFML_FOUND)
include_directories(${SFML_INCLUDE_DIR})
target_link_libraries(${PROJECT_NAME} ${SFML_LIBRARIES})
endif()
-
Hey! Another CLion user!
I too used to have problems getting CLion to work with SFML. When I get a chance today I'll see if I can help you with your problem.
Edit: That's if you're still experiencing it, as your last post was in July.