Hi, ich habe folgendes (minimales) Codebeispiel:
1 2 3 4 5 6 | #include <SFML/Graphics.hpp> int main() { sf::Texture tex; tex.loadFromFile("foo.png"); } |
Wenn ich mit clang++ -o main main.cpp -std=c++11 -lsfml-graphics
kompiliere klappt das super. Nun will ich aber auf CMake umsteigen und habe folgende CMakeLists.txt geschrieben:
1 2 3 4 5 6 7 8 | cmake_minimum_required (VERSION 2.8) project (main) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") set(PROJECT_BINARY_DIR, ${CMAKE_SOURCE_DIR}) add_executable(main main.cpp) target_link_libraries(main sfml-graphics) |
Allerdings klappt das Linken nicht richtig:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | $ cmake . -- The C compiler identification is Clang 3.5.0 -- The CXX compiler identification is Clang 3.5.0 -- 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 -- Configuring done -- Generating done -- Build files have been written to: /home/christian/Arbeitsfläche/ThorResource $ make [100%] Building CXX object CMakeFiles/main.dir/main.cpp.o Linking CXX executable main CMakeFiles/main.dir/main.cpp.o: In Funktion `main': /home/christian/Arbeitsfläche/ThorResource/main.cpp:(.text+0x84): Nicht definierter Verweis auf `sf::Texture::loadFromFile(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, sf::Rect<int> const&)' clang: error: linker command failed with exit code 1 (use -v to see invocation) make[2]: *** [main] Fehler 1 make[1]: *** [CMakeFiles/main.dir/all] Fehler 2 make: *** [all] Fehler 2 |
Die Methode sf::Texture::loadFromFile()
befindet sich in libsfml-graphics.so
, weshalb ich gegen sfml-graphics
linke. Richtig positioniert muss das SharedObject sein, sonst würde ich es mit dem obigen Versuch, mit clang direkt zu kompilieren, gar nicht funktionieren.
Hat jemand eine Idee was mit meiner CMake-Datei nicht stimmt? CMake-Tutorials im Netz sind recht spärlich. Daher habe ich mittels ubuntuusers-wiki, dem CMake-Tutorial und zweier Projekte (die CMake verwenden) irgendwie versucht etwas lauffähiges hinzubekommen 😬
LG Glocke