SFML community forums

Help => General => Topic started by: jaqb17 on November 26, 2016, 12:26:02 am

Title: Linking with CMake
Post by: jaqb17 on November 26, 2016, 12:26:02 am
Hello!

I want to generate a simple project with CMake. Here is my CMakeLists.txt

Code: [Select]
cmake_minimum_required(VERSION 3.4)
 
project(Program)
 
set(SOURCE_FILES
        src/main.cpp
        )

set(SFML_ROOT "${CMAKE_SOURCE_DIR}/SFML/lib")
set(SFML_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/SFML/include")
set(SFML_LIBRARY_DIR "${CMAKE_SOURCE_DIR}/SFML/lib")
 
 
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/SFML/cmake/Modules")
 
find_package(SFML 2 REQUIRED window )
 
include_directories(
    ${SFML_INCLUDE_DIR}
)
 
add_executable(Program ${SOURCE_FILES}
        ${SFML_LIBRARIES}     
)
 
message ( ${SFML_LIBRARIES} )
 
target_link_libraries(Program ${SFML_LIBRARIES})

Everything works great on OSX, but on Windows SFML_LIBRARIES looks like this:
debug<path...>/lib/libsfml-window-d.aoptimized<path...>/lib/libsfml-window.a


...and because of that i got CMake error (check out screenshot).
What should I do to make it work on Windows?
Title: Re: Linking with CMake
Post by: Laurent on November 26, 2016, 09:28:08 am
Quote
Everything works great on OSX, but on Windows SFML_LIBRARIES looks like this:
debug<path...>/lib/libsfml-window-d.aoptimized<path...>/lib/libsfml-window.a


...and because of that i got CMake error
No, not because of that. This part is perfectly fine. What's wrong is that you put libraries in add_executable (which should only contain source files).
Title: Re: Linking with CMake
Post by: jaqb17 on November 26, 2016, 10:12:32 am
OK I removed SFML_LIBRARIES from add_executable, and generating works well, but now linking is a problem (undefined references).
I tried to build SFML by myself, and also modified my CMakeLists.txt. Now it looks like that:

Code: [Select]
cmake_minimum_required(VERSION 3.4)

project(Program)

set(SOURCE_FILES
        src/main.cpp
        )




set(SFML_ROOT "C:/Users/Komputer.DESKTOP-5G9R8AU/Desktop/SFML_ROOT/install")
set(SFML_INCLUDE_DIR "C:/Users/Komputer.DESKTOP-5G9R8AU/Desktop/SFML_ROOT/install/include")
set(SFML_LIBRARY_DIR "C:/Users/Komputer.DESKTOP-5G9R8AU/Desktop/SFML_ROOT/install/lib")



set(CMAKE_MODULE_PATH "C:/Users/Komputer.DESKTOP-5G9R8AU/Desktop/SFML_ROOT/install/cmake/Modules")


find_package(SFML 2 REQUIRED window)

include_directories(
    ${SFML_INCLUDE_DIR}
)

add_executable(Program ${SOURCE_FILES}

)

message ( ${SFML_LIBRARIES} )


target_link_libraries(Program ${SFML_LIBRARIES} ${SFML_DEPENDENCIES})

Something I forgot?
Title: Re: Linking with CMake
Post by: Laurent on November 26, 2016, 10:28:09 am
Quote
Something I forgot?
The error messages ;)
Title: Re: Linking with CMake
Post by: jaqb17 on November 26, 2016, 03:27:51 pm
Here you go! :D
It throws error like this for every use of SFML object.
Title: Re: Linking with CMake
Post by: eXpl0it3r on November 26, 2016, 04:47:24 pm
The window module depends on the system module, so you'll also have to find that. Additionally you shouldn't set SFML_INCLUDE_DIR and SFML_LIBRARY_DIR yourself, those are automatically set by FindSFML.cmake.
Title: Re: Linking with CMake
Post by: jaqb17 on December 01, 2016, 02:03:50 pm
Oh shit! Right! I forgot about system module! Thanks sir! Now everything is fine.  ::)