我想直接使用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链接
答案 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
中,而不是如何使用它。我甚至不确定你是否能以这种方式工作。