SFML не найден - CLion / Cmake

Я в основном пытаюсь создать проект SFML в CLion, который использует CMake.

Сначала я загрузил SFML 2.2, в котором уже были построены .dylib файлы. Было сказано установить их в usr/local/lib и usr/local/include, но их не существовало, поэтому я создал их, а затем поместил туда файлы.

Затем я открыл CLion, создал подкаталог cmake_modules, поместил файл FindSFML.cmake внутрь и в корневой каталог проекта поместил эти файлы:

main.cpp

#include <SFML/Graphics.hpp>

int main()
{
    sf::err() << "Hello, World!" << std::endl;
    return 0;
}

CMakeLists.txt:

cmake_minimum_required(VERSION 3.2)
project(HelloWorld)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(SOURCE_FILES main.cpp)
add_executable(HelloWorld ${SOURCE_FILES})

set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules" ${CMAKE_MODULE_PATH})

find_package(SFML COMPONENTS graphics window system REQUIRED)
include_directories(${SFML_INCLUDE_DIR})

target_link_libraries(HelloWorld ${SFML_Libraries})

Проблема в том, что когда я пытаюсь собрать проект, я получаю следующую ошибку:

Undefined symbols for architecture x86_64:
  "sf::err()", referenced from:
      _main in main.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Я пытался найти решение, но, похоже, ни одно из них не работает. Я поместил файлы не в то место или забыл некоторые настройки импорта CMake? Я знаю, что настроить SFML с помощью Xcode было бы проще, но я бы предпочел использовать CLion, если это вообще возможно.


person rcplusplus    schedule 28.07.2015    source источник
comment
Вы видели, что: stackoverflow.com/questions/25436761/?   -  person Tsyvarev    schedule 29.07.2015
comment
@Tsyvarev эта ссылка не особо помогла, я нашел здесь еще одну: goobbe.com/questions/4676434/ и скопировать конфигурацию make-файла внизу точно, но теперь он говорит fatal error: 'SFML/Graphics.hpp' file not found   -  person rcplusplus    schedule 29.07.2015
comment
О, это также говорит make[3]: *** No rule to make target /Users/Rutvik/Downloads/SFML-2.3/lib/libsfml-system.dylib   -  person rcplusplus    schedule 29.07.2015


Ответы (3)


Итак, я создал совершенно новый проект, запустил xcode-select --install на моем терминале, чтобы /usr/local/ стал каталогом, который будет искать компилятор, загрузил SFML 2.3 вместо 2.2, решил использовать FindSFML.cmake файл, поставляемый с SFML , и мой CmakeLists.txt файл выглядел так:

cmake_minimum_required(VERSION 3.2)
project(SFMLTest)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(SOURCE_FILES main.cpp)
add_executable(SFMLTest ${SOURCE_FILES})

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "~/SFML-2.3/cmake/Modules/")
find_package(SFML REQUIRED graphics window system)
if (SFML_FOUND)
    include_directories(${SFML_INCLUDE_DIR})
    target_link_libraries(SFMLTest ${SFML_LIBRARIES})
endif(SFML_FOUND)

Это скомпилировал и запустил следующий код в CLion:

#include <iostream>
#include <SFML/Graphics.hpp>

using namespace std;

int main()
{
    sf::RenderWindow window(sf::VideoMode(640, 480), "Window");

    while (window.isOpen())
    {
        sf::Event e;
        while (window.pollEvent(e))
        {
            if (e.type == sf::Event::Closed)
            {
                window.close();
            }
        }

        window.clear();
        window.display();
    }
    return 0;
}

Я не знаю, что именно все исправило, но я просто рад, что это произошло. Надеюсь, это поможет всем, кто попал в подобную ситуацию.

person rcplusplus    schedule 29.07.2015

Для SFML 2.5 и выше был применен более современный подход, и настройка cmake стала проще.

Пример CMakeLists.txt

cmake_minimum_required(VERSION 3.1)

project(SFMLTest)

find_package(SFML 2.5 COMPONENTS graphics audio REQUIRED)
add_executable(SFMLTest main.cpp)
target_link_libraries(SFMLTest sfml-graphics sfml-audio)

Примечание :

Больше не нужно устанавливать FindSFML.cmake, SFML_ROOT и т. Д.

SFML_LIBRARIES, SFML_DEPENDENCIES и SFML_INCLUDE_DIR больше не существуют

Дополнительная информация https://en.sfml-dev.org/forums/index.php?topic=24070.0

person lastbreath    schedule 11.02.2021

Для тех, кто скачал SFML через brew, мне удалось исправить это, добавив это в мой CMakeLists.txt.

set(SFML_ROOT /usr/local/lib)
person koko    schedule 25.01.2018
comment
Я застрял в этом, и я загрузил SFML через brew, есть ли помощь? - person Eddy Ekofo; 03.05.2019