【问题标题】:Can't create cmake rules for compile SFML project无法为编译 SFML 项目创建 cmake 规则
【发布时间】:2017-09-13 09:51:46
【问题描述】:

我有 build/CMakeLists.txt 文件:

cmake_minimum_required (VERSION 2.8)
project(Tetris)

include_directories(
    "headers"
)

set(SFML_DEPENDENCIES)
set(SFML_DEPENDENCIES ${SFML_SYSTEM_DEPENDENCIES} ${SFML_DEPENDENCIES})
set(SFML_DEPENDENCIES ${SFML_GRAPHICS_DEPENDENCIES} ${SFML_DEPENDENCIES})
set(SFML_DEPENDENCIES ${SFML_WINDOW_DEPENDENCIES} ${SFML_DEPENDENCIES})

set(CMAKE_CXX_COMPILER /usr/bin/g++-5)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -g")

set(EXECUTABLE_NAME "tetris")
file(GLOB SOURCES *.cpp)
add_executable(${EXECUTABLE_NAME} ${SOURCES})
target_link_libraries(${EXECUTABLE_NAME} ${SFML_LIBRARIES})

当我运行 cmake .. && make 时,屏幕上显示我没有包含 SFML 库的消息:

undefined reference to `sf::VertexArray::operator[](unsigned long)'
undefined reference to `sf::Keyboard::isKeyPressed(sf::Keyboard::Key)'

等等。我还尝试将标志包含到 CMAKE_CXX_FLAGS 变量中: -lsfml-graphics -lsfml-window -lsfml-system 它也不起作用。但如果我直接从控制台运行 g++,所有编译都很好:

g++-5 --std=c++11 -Wall main.cpp Game.cpp Window.cpp Board.cpp -lsfml-graphics -lsfml-window -lsfml-system

如果有什么不同,我会使用 Linux Mint。

【问题讨论】:

    标签: c++ cmake sfml


    【解决方案1】:

    你需要找到SFML包的位置,并添加包含目录和链接。

    在您的 CMakeLists.txt 中:
    更改此行:

    target_link_libraries(${EXECUTABLE_NAME} ${SFML_LIBRARIES})
    

    作者:

    # Detect and add SFML
    set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules" ${CMAKE_MODULE_PATH})
    #Find any version 2.X of SFML
    #See the FindSFML.cmake file for additional details and instructions
    find_package(SFML 2 REQUIRED system window graphics)
    if(SFML_FOUND)
      include_directories(${SFML_INCLUDE_DIR})
      target_link_libraries(${EXECUTABLE_NAME} ${SFML_LIBRARIES})
    endif()
    

    Source

    已编辑

    对于 SFML v1,将 find_package 行更改为:

    find_package(SFML 1 REQUIRED system window graphics)
    

    【讨论】:

    • 已编辑,顺便说一句,您是否正确安装了 SFML?
    • 你是对的。我没有正确安装它,这对我来说是一个噩梦大约四个小时。正如你所指出的,我创建了一个 cmake_modules/FindSFML.cmake 文件,但它说我安装了 SFML v1,但我从源代码编译了 SFML 2.4,一切都很好。 g++到底是怎么用这种方式正确编译的。
    • @JamesMay 已编辑,请更改 find_package 以使用 SFML v1
    • 顺便说一句,如果您是从源代码编译 SFML,请务必以 sudo o root 用户身份执行 make install
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 2018-01-20
    • 2011-03-05
    • 1970-01-01
    • 2018-11-16
    • 2014-07-10
    • 2021-11-14
    相关资源
    最近更新 更多