当我尝试运行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,它开箱即用。
答案 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})