SFML community forums

Help => General => Topic started by: Arknode on August 13, 2013, 05:10:08 pm

Title: how to use SFML LIbarys in Cmake ?
Post by: Arknode on August 13, 2013, 05:10:08 pm
Hello all,

iam new at cmake and i do not know really how link a libary in it. I start with the book "mastering cmake" and i think its really bad. Whatever.

I have compiled the libary from SFML by my own on Ubuntu. The libarys is located in the std-path usr/local/lib and the compiling by command line works fine.

First i found the FindSFML.cmake on the book-github dir. https://github.com/SFML/SFML-Game-Development-Book/blob/master/CMake/FindSFML.cmake  i use it with this CMakeLists.txt

Code: [Select]
cmake_minimum_required (VERSION 2.8)
project(SFML_Test)

set (TEST_SRCS main.cpp check.cpp)

find_package(SFML COMPONENTS graphics window system)
add_executable (SFML_Test ${TEST_SRCS})
target_link_libraries(SFML_Test ${SFML_LIBRARIES})

If i run cmake. it shows this

Quote
-- The C compiler identification is GNU 4.7.3
-- The CXX compiler identification is GNU 4.7.3
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
CMake Warning at CMakeLists.txt:6 (find_package):
  By not providing "FindSFML.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "SFML", but
  CMake did not find one.

  Could not find a package configuration file provided by "SFML" with any of
  the following names:

    SFMLConfig.cmake
    sfml-config.cmake

  Add the installation prefix of "SFML" to CMAKE_PREFIX_PATH or set
  "SFML_DIR" to a directory containing one of the above files.  If "SFML"
  provides a separate development package or SDK, be sure it has been
  installed.


-- Configuring done
-- Generating done
-- Build files have been written to: /...

If i run make now

Quote
[ 50%] Building CXX object CMakeFiles/SFML_Test.dir/main.cpp.o
[100%] Building CXX object CMakeFiles/SFML_Test.dir/check.cpp.o
Linking CXX executable SFML_Test
CMakeFiles/SFML_Test.dir/main.cpp.o: In function `main':
main.cpp:(.text+0xf7): undefined reference to `sf::String::String(char const*, std::locale const&)'
main.cpp:(.text+0x115): undefined reference to `sf::VideoMode::VideoMode(unsigned int, unsigned int, unsigned int)'
main.cpp:(.text+0x148): undefined reference to `sf::RenderWindow::RenderWindow(sf::VideoMode, sf::String const&, unsigned int, sf::ContextSettings const&)'
main.cpp:(.text+0x182): undefined reference to `sf::CircleShape::CircleShape(float, unsigned int)'
main.cpp:(.text+0x18e): undefined reference to `sf::Color::Green'
main.cpp:(.text+0x196): undefined reference to `sf::Shape::setFillColor(sf::Color const&)'
main.cpp:(.text+0x1b4): undefined reference to `sf::Window::close()'
main.cpp:(.text+0x1cd): undefined reference to `sf::Window::pollEvent(sf::Event&)'
main.cpp:(.text+0x1fa): undefined reference to `sf::Color::Color(unsigned char, unsigned char, unsigned char, unsigned char)'
main.cpp:(.text+0x217): undefined reference to `sf::RenderTarget::clear(sf::Color const&)'
main.cpp:(.text+0x22e): undefined reference to `sf::RenderStates::Default'
main.cpp:(.text+0x239): undefined reference to `sf::RenderTarget::draw(sf::Drawable const&, sf::RenderStates const&)'
main.cpp:(.text+0x248): undefined reference to `sf::Window::display()'
main.cpp:(.text+0x257): undefined reference to `sf::Window::isOpen() const'
main.cpp:(.text+0x282): undefined reference to `sf::RenderWindow::~RenderWindow()'
main.cpp:(.text+0x2b1): undefined reference to `sf::RenderWindow::~RenderWindow()'
main.cpp:(.text+0x2f7): undefined reference to `sf::RenderWindow::~RenderWindow()'
CMakeFiles/SFML_Test.dir/main.cpp.o: In function `sf::CircleShape::~CircleShape()':
main.cpp:(.text._ZN2sf11CircleShapeD2Ev[_ZN2sf11CircleShapeD5Ev]+0x13): undefined reference to `vtable for sf::CircleShape'
main.cpp:(.text._ZN2sf11CircleShapeD2Ev[_ZN2sf11CircleShapeD5Ev]+0x1f): undefined reference to `vtable for sf::CircleShape'
main.cpp:(.text._ZN2sf11CircleShapeD2Ev[_ZN2sf11CircleShapeD5Ev]+0x2b): undefined reference to `sf::Shape::~Shape()'
collect2: Fehler: ld gab 1 als Ende-Status zurück
make[2]: *** [SFML_Test] Fehler 1
make[1]: *** [CMakeFiles/SFML_Test.dir/all] Fehler 2
make: *** [all] Fehler 2

Maybe anyone knows how to fix this?

best regards
Title: Re: how to use SFML LIbarys in Cmake ?
Post by: zsbzsb on August 13, 2013, 05:59:45 pm
You don't need to "master" cmake in order to compile SFML. What I suggest is that you follow Laurent's great tutorial (http://www.sfml-dev.org/tutorials/2.1/compile-with-cmake.php) step by step.
Title: Re: how to use SFML LIbarys in Cmake ?
Post by: Laurent on August 13, 2013, 06:01:20 pm
FindSFML.cmake must either be in the CMake module folder (/usr/share/cmake/modules ... or something), or you can add its path to the CMAKE_MODULE_PATH (or something ;D) CMake variable.
Title: Re: how to use SFML LIbarys in Cmake ?
Post by: Sonkun on August 14, 2013, 08:39:45 am
FindSFML.cmake must either be in the CMake module folder (/usr/share/cmake/modules ... or something), or you can add its path to the CMAKE_MODULE_PATH (or something ;D) CMake variable.
Yeah, something like that :D

Actually, it will work if you move FindSFML.cmake to /usr/share/cmake-x-y/Modules but this directory is for FindXXX.cmake scripts that comes with CMake. The actual directories are listed there: http://www.cmake.org/cmake/help/v2.8.8/cmake.html#command:find_package But often, each Linux distributions define a standard place for these scripts.