Как запустить CLion с SFML и CMake на Linux? Ошибки в марке и аудио? - PullRequest
1 голос
/ 09 марта 2020

Я довольно новичок в установке, перестановке файлов и написании кода для Linux. Когда мне предложили установить CLion вместе с SFML и CMake, я столкнулся с множеством проблем, выясняя, как заставить их работать. В настоящее время я использую Debian GNU / Linux bullseye / sid (скопировано прямо из того, что я видел), так что если есть что-то конкретное c об этом, было бы тоже неплохо узнать.

В частности, я сталкиваюсь с проблемой, когда решаю запустить свой файл. Я получаю этот набор ошибок.

/usr/bin/ld: attempted static link of dynamic object `/home/user/Development/sfmlbuild/lib/libsfml-audio.so'
collect2: error: ld returned 1 exit status
make[3]: *** [CMakeFiles/sfml_project.dir/build.make:88: sfml_project] Error 1
make[2]: *** [CMakeFiles/Makefile2:76: CMakeFiles/sfml_project.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/sfml_project.dir/rule] Error 2
make: *** [Makefile:118: sfml_project] Error 2

Это то, что у меня есть и в моем CMakeLists.txt, который, как я полагаю, находит большинство файлов SFML, поэтому CLion может их использовать.

cmake_minimum_required(VERSION 3.7)
set(PROJECT_NAME sfml_project)

project(${PROJECT_NAME})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -static")

set(CMAKE_CXX_STANDARD 14)

set(SOURCE_FILES main.cpp)

if (CMAKE_BUILD_TYPE STREQUAL "Release")
    add_executable(${PROJECT_NAME} WIN32 ${SOURCE_FILES})
else ()
    add_executable(${PROJECT_NAME} ${SOURCE_FILES})
endif ()

set(SFML_ROOT "/home/user/Development/sfmlbuild")
cmake_policy(SET CMP0074 NEW)
set(SFML_STATIC_LIBRARIES FALSE)

set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake_modules")
find_package(SFML  REQUIRED COMPONENTS audio graphics window system)
if (SFML_FOUND)
    include_directories(${SFML_INCLUDE_DIR})
    target_link_libraries(${PROJECT_NAME} ${SFML_LIBRARIES} ${SFML_DEPENDENCIES})
endif ()

Я не уверен, что делать дальше, или если что-то не так, в частности, в том, как у меня настроен CLion. Я установил в моем приложении CMake папку, в которой находится мой sfml_project. А мой sfmlbuild, который содержит версию SFML Linux, загруженную из пакета, находится в отдельной папке, в которой находится файл libsfml-audio.so. Что касается сборки, выполнения и разработки программы CLion, у меня есть наборы инструментов для обнаружения компилятора Make, C и компилятора C ++, где я также оставил профиль, который доступен по умолчанию. Возможно, это связано с чем-то неправильным, но я, честно говоря, не уверен, что делать дальше.

Если кто-то может дать мне отзыв, маленький или большой, то я был бы очень признателен и попытался бы вернуться так быстро, как я могу с ответами о том, сделал ли я определенные вещи.

Кроме того, я приношу свои извинения, так как я впервые использую этот веб-сайт, чтобы задавать какие-либо вопросы, поэтому, если этот вопрос плохо сделан Я принимаю свою неопытность и надеюсь, что в следующий раз все будет лучше.

--- Редактировать обновление - Полагаю, я должен был указать, какие именно ошибки были, и я добавлю их здесь также.

Для модели [3]: Ошибка 1

# External object files for target sfml_project
sfml_project_EXTERNAL_OBJECTS =

sfml_project: CMakeFiles/sfml_project.dir/main.cpp.o
sfml_project: CMakeFiles/sfml_project.dir/build.make
sfml_project: /home/user/Development/sfmlbuild/lib/libsfml-audio.so
sfml_project: /home/user/Development/sfmlbuild/lib/libsfml-graphics.so
sfml_project: /home/user/Development/sfmlbuild/lib/libsfml-window.so
sfml_project: /home/user/Development/sfmlbuild/lib/libsfml-system.so
sfml_project: CMakeFiles/sfml_project.dir/link.txt
    @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/user/CLionProjects/sfml_project/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable sfml_project"
//Line #88 is the next one which the error refers to.
    $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/sfml_project.dir/link.txt --verbose=$(VERBOSE)

Для модели [2], Ошибка 2:

# All Build rule for target.
CMakeFiles/sfml_project.dir/all:
    $(MAKE) -f CMakeFiles/sfml_project.dir/build.make CMakeFiles/sfml_project.dir/depend
//The next line is line 76 for which error 2 occurs with make[2].
    $(MAKE) -f CMakeFiles/sfml_project.dir/build.make CMakeFiles/sfml_project.dir/build
    @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/user/CLionProjects/sfml_project/CMakeFiles --progress-num=1,2 "Built target sfml_project"
.PHONY : CMakeFiles/sfml_project.dir/all

Для модели [1], Ошибка 2:

# Build rule for subdir invocation for target.
CMakeFiles/sfml_project.dir/rule: cmake_check_build_system
    $(CMAKE_COMMAND) -E cmake_progress_start /home/user/CLionProjects/sfml_project/CMakeFiles 2
//The next line is 83 for which make[1] occurs.
    $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/sfml_project.dir/all
    $(CMAKE_COMMAND) -E cmake_progress_start /home/user/CLionProjects/sfml_project/CMakeFiles 0
.PHONY : CMakeFiles/sfml_project.dir/rule

Ошибка make выглядит следующим образом, Ошибка 2:

# Build rule for target.
sfml_project: cmake_check_build_system
//The next line is 118 for the make error.
    $(MAKE) -f CMakeFiles/Makefile2 sfml_project
.PHONY : sfml_project

Я прошу прощения за размещение всей этой информации так поздно; Я до сих пор не совсем понимаю, но надеюсь, что это даст больше информации для помощи.

1 Ответ

0 голосов
/ 16 марта 2020

Одна потенциальная проблема - это ваш флаг find_package, когда вы просматриваете проект, который я использовал, я использовал

find_package(SFML 2.5.1 COMPONENTS graphics audio REQUIRED)

Попробуйте добавить номер версии

другую проблему, согласно этому сайту SFML_ ROOT заменяется на SFML_DIR. У нее на сайте: https://en.sfml-dev.org/forums/index.php?topic=24070.0

...