2017-09-23 150 views
0

下的cmake和MinGW当我尝试运行cmake建立一个项目,我包括SFML图书馆中,我得到以下错误:SFML found but version too low (requested: 2.4, found: 1.x.x)编译SFML与Windows

我只需下载该库的最新版本的源(SFML-2.4.2)。我比运行cmake(使用MinGW Makefiles)并将二进制文件构建到同一个文件夹中。 我将FindSFML复制到我的项目的子文件夹中。 之后,我有以下文件夹结构

SFML-2.4.2\ 
    cmake\ 
    Modules\ 
     FindSFML.cmake 
    CMakeFiles 
    doc 
    ... 
    include 
    lib 
    src 
    .. 

sfml-games\ 
    tetris\ 
    cmake_modules\ 
     FindSFML.cmake 
    CMakeLists.txt 
    main.cpp 
    tetris-build 
    ... 

我的CMakeLists.txt包含以下东西:

project(Tetris) 
cmake_minimum_required(VERSION 2.8) 
aux_source_directory(. SRC_LIST) 

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake_modules") 
Find_package(SFML 2 REQUIRED system window graphics network audio) 

include_directories(${SFML_INCLUDE_DIR}) 

add_executable(${PROJECT_NAME} ${SRC_LIST}) 

target_link_libraries(${PROJECT_NAME} ${SFML_LIBRARY}) 

我发现,在C进行录入CMAKE_INSTALL_PREFIX(我不明白)设置为C:\Program Files (x86)\SFML所以我把库和SFML的lib放到C:\ Program Files(x86)\ SFML中。 (什么是CMAKE_INSTALL_PREFIX,我应该总是将库和lib文件夹复制到我的C:\Program Files (x86)\ ??)。现在我的cmake运行通过,但是当我尝试编译代码时,我得到了很多未解析的引用'_imp __....'

顺便说一句,在linux上我刚刚通过sudo apt-get install libsfml-dev安装了SFML, 。

回答

0

你在混淆事物。 CMAKE_INSTALL_PREFIX是构建install目标(即运行make install)时将SFML放置到的默认位置。这与你的其他问题无关。

您不必在C:\Program Files下的某处安装SFML(或任何其他库)。这完全取决于你。

我发现相当整洁的是将MinGW安装到C:\usr(或创建符号链接到安装文件夹),并在构建SFML时使用CMAKE_INSTALL_PREFIX的路径。

这种方式MinGW应该像你习惯于Linux的方式一样工作(即不必为包含目录或库等指定路径)。

至于你未定义的引用错误,你应该创建一个新的问题,只询问这些问题(然后至少包括其中的几个),因为它们与安装目录无关。

现在我只能猜测,但这很可能是由于您为链接器使用了错误的CMake变量。您不会在Linux上注意到这一点,因为SFML将处于默认搜索路径中(如果您使用上述C:\usr,也会发生这种情况)。

要尝试解决这个,用这个行:

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