直接使用源代码编译SFML项目并使用CMake

时间:2015-11-11 18:50:30

标签: cmake sfml

我想直接使用SFML源编译SFML项目。

我正在使用CLion,它是一个使用CMakeLists作为项目proprety文件的IDE (他用CMake自己)

这是我的CMakeLists.txt:

cmake_minimum_required(VERSION 3.3)

include(${CMAKE_CURRENT_SOURCE_DIR}/SFML/CMakeLists.txt)

project(R-Type)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -static -static-libgcc -static-libgcc -static-libstdc++")

set(SOURCE_FILES
    Client/src/main.cpp)

include_directories("${CMAKE_CURRENT_SOURCE_DIR}/Client/Include ")

add_executable(R-Type ${SOURCE_FILES})

正如您所看到的,我正在尝试调用捆绑了SFML源的CMakeLists,但它不起作用..

错误日志(在我的项目中手动复制标题SFML文件后)

C:/Users/roman/Documents/CLionProjects/R-Type/Client/src/main.cpp:9: undefined reference to `_imp___ZN2sf6StringC1EPKcRKSt6locale' 
C:/Users/roman/Documents/CLionProjects/R-Type/Client/src/main.cpp:9: undefined reference to `_imp___ZN2sf9VideoModeC1Ejjj' 
C:/Users/roman/Documents/CLionProjects/R-Type/Client/src/main.cpp:9: undefined reference to `_imp___ZN2sf6WindowC1ENS_9VideoModeERKNS_6StringEjRKNS_15ContextSettingsE'
C:/Users/roman/Documents/CLionProjects/R-Type/Client/src/main.cpp:20: undefined reference to `_imp___ZN2sf6Window5closeEv'
C:/Users/roman/Documents/CLionProjects/R-Type/Client/src/main.cpp:16: undefined reference to `_imp___ZN2sf6Window9pollEventERNS_5EventE'
C:/Users/roman/Documents/CLionProjects/R-Type/Client/src/main.cpp:12: undefined reference to `_imp___ZNK2sf6Window6isOpenEv'
C:/Users/roman/Documents/CLionProjects/R-Type/Client/src/main.cpp:24: undefined reference to `_imp___ZN2sf6WindowD1Ev'
C:/Users/roman/Documents/CLionProjects/R-Type/Client/src/main.cpp:24: undefined reference to `_imp___ZN2sf6WindowD1Ev'
collect2.exe: error: ld returned 1 exit status

正如您所看到的,尽管调用了SFML CMakeList,但compilor无法与SFML链接

1 个答案:

答案 0 :(得分:0)

您应该使用CMake在系统上构建和安装SFML。在使用SFML的应用程序中,您应该使用适当的cmake modules provided by SFML来查找所需的各个库。 (SFML不是单个库,它是一组库:EGL,FLAC等)

SFML提供的查找模块设置了您在target_link_libraries中用于可执行文件的相应cmake变量。

如果你现在从我的C ++中查看test_driven.pdf! 2014 presentation on Test-Driven Development,我通过一个使用cmake来查找Boost.Test find_package的示例。您可以类似地使用find_package来查找SFML模块描述的SFML包。

当然,如果不花一些时间学习cmake的工作方式,这对你来说都没有意义。为了正确使用您的构建系统(cmake),您需要了解构建系统及其工作原理。

您在示例中所做的是将SFML CMakeLists.txt直接包含在您项目的CMakeLists.txt中,而不是如何使用它。我甚至不确定你是否能以这种方式工作。