在Windows

时间:2017-09-23 18:10:21

标签: windows cmake mingw sfml

当我尝试运行cmake来构建我包含SFML库的项目时,我收到以下错误:SFML found but version too low (requested: 2.4, found: 1.x.x)

我只下载了最新版本的库(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})

我发现在cmake中,条目CMAKE_INSTALL_PREFIX(我没有得到)被设置为C:\Program Files (x86)\SFML所以我把库和SFML的库放到C:\ Program Files(x86)\ SFML中。 (那是什么CMAKE_INSTALL_PREFIX,我应该总是将库和lib文件夹复制到我的C:\Program Files (x86)\ ??)。现在我的cmake运行完毕,但是当我尝试编译代码时,我得到了很多未经过时效的引用' _imp __....'

顺便说一下,我刚刚通过sudo apt-get install libsfml-dev安装了SFML,它开箱即用。

1 个答案:

答案 0 :(得分:0)

你让事情变得混乱。 CMAKE_INSTALL_PREFIX是构建install目标(即运行make install)时放置SFML的默认位置。这与你的其他问题无关。

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

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

这样MinGW的行为就像你习惯使用Linux一样(即不必为include dir或library等指定路径)。

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

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

要尝试解决此问题,请使用以下行:

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