我有一个 Steam Deck,想在 Steamdeck 上安装 GLFW,以便 VSCode 可以找到库,我使用 Cmake。我在另一台linux机器上使用Cmake没有任何问题。我认为这与Steam Deck和Steam os有关。
我在 usr/lib/cmake/glfw3 中包含以下文件:
/usr/include/GLFW 中还有两个头文件,名为:
我也有这个:
在 main.cpp 文件中,#include
我的 Cmake 文件现在看起来像这样:
cmake_minimum_required(VERSION 3.12)
project(test)
# Add executable
add_executable(test src/main.cpp)
# Specify the path to GLFW include directory
set(GLFW_INCLUDE_DIR "/usr/include" CACHE PATH "Path to GLFW include directory")
# Specify the path to GLFW library directory
set(GLFW_LIBRARY_DIR "/usr/lib" CACHE PATH "Path to GLFW library directory")
# Add GLFW include directory
target_include_directories(test PRIVATE ${GLFW_INCLUDE_DIR})
# Link GLFW library to your executable
target_link_libraries(test ${GLFW_LIBRARY_DIR}/libglfw.so)
也许对 cmake、c 和 linux 有更好了解的人可以帮助我。
提前谢谢您。
我尝试了 cmake 文件与 find() 等的不同组合。查阅了互联网,并使用 Chat GPT 找到了解决方案。 重新安装
sudo pacman -S glfw-x11
glfw 再次出现在蒸汽甲板上。
编辑:
这是我开始构建时的完整错误:
[main] Building folder: game_engine all
[build] Starting build
[proc] Executing command: /usr/bin/cmake --build /home/deck/Programming/game_engine/build --config Debug --target all --
[build] ninja: error: '/usr/lib/libglfw.so', needed by 'test', missing and no known rule to make it
[proc] The command: /usr/bin/cmake --build /home/deck/Programming/game_engine/build --config Debug --target all -- exited with code: 1
[driver] Build completed: 00:00:00.029
[build] Build finished with exit code 1
编辑2:
当我保护 CMakeList.txt 时,我在 VSCode 中收到以下消息:
[main] Configuring project: game_engine
[proc] Executing command: /usr/bin/cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_C_COMPILER:FILEPATH=/usr/bin/gcc -DCMAKE_CXX_COMPILER:FILEPATH=/usr/bin/g++ -S/home/deck/Programming/game_engine -B/home/deck/Programming/game_engine/build -G Ninja
[cmake] Not searching for unused variables given on the command line.
[cmake] -- Configuring done (0.0s)
[cmake] -- Generating done (0.0s)
[cmake] -- Build files have been written to: /home/deck/Programming/game_engine/build
usr/lib/libglfw.so 的权限:
使用以下命令:
ls -l libglfw.so
lrwxrwxrwx 1 root root 12 Jul 23 2022 libglfw.so -> libglfw.so.3
编辑3:
如果我将
target_link_libraries(test ${GLFW_LIBRARY_DIR}/libglfw.so)
更改为 target_link_libraries(test $usr/lib/libglfw.so.3.3)
权限设置为:-rwxr-xr-x 1 root root 278200 Jul 23 2022 /usr/lib/libglfw.so.3.3
/usr/include/GLFW/glfw3.h 的权限:-rw-r--r-- 1 root root 215860 Jul 23 2022 glfw3.h
我在构建过程中遇到此错误:
[main] Building folder: game_engine
[build] Starting build
[proc] Executing command: /usr/bin/cmake --build /home/deck/Programming/game_engine/build --config Debug --target all --
[build] [1/2 50% :: 0.022] Building CXX object CMakeFiles/test.dir/src/main.cpp.o
[build] FAILED: CMakeFiles/test.dir/src/main.cpp.o
[build] /usr/bin/g++ -g -std=gnu++11 -MD -MT CMakeFiles/test.dir/src/main.cpp.o -MF CMakeFiles/test.dir/src/main.cpp.o.d -o CMakeFiles/test.dir/src/main.cpp.o -c /home/deck/Programming/game_engine/src/main.cpp
[build] /home/deck/Programming/game_engine/src/main.cpp:3:10: fatal error: GLFW/glfw3.h: No such file or directory
[build] 3 | #include <GLFW/glfw3.h>
[build] | ^~~~~~~~~~~~~~
[build] compilation terminated.
[build] ninja: build stopped: subcommand failed.
[proc] The command: /usr/bin/cmake --build /home/deck/Programming/game_engine/build --config Debug --target all -- exited with code: 1
[driver] Build completed: 00:00:00.054
[build] Build finished with exit code 1
我找到了适合我的系统的解决方案。
您的项目将如下所示: 图形程序目录: -----源: ---------main.cpp -----CMakeLists.txt -----glfw-3.4
make_minimum_required( VERSION 3.5 )
project( test )
set(OpenGL_GL_PREFERENCE "GLVND")
find_package( OpenGL REQUIRED )
include_directories( ${OPENGL_INCLUDE_DIRS} )
set( GLFW_BUILD_DOCS OFF CACHE BOOL "GLFW lib only" )
set( GLFW_INSTALL OFF CACHE BOOL "GLFW lib only" )
set( GLAD_GL "" )
add_subdirectory( glfw-3.4 )
option( USE_GLAD "Use GLAD from GLFW" ON )
if( USE_GLAD )
include_directories("${GLFW_SOURCE_DIR}/deps")
set( GLAD_GL "${GLFW_SOURCE_DIR}/deps/glad/gl.h" )
endif()
set( TEST_START
src/main.cpp
)
add_executable( test ${TEST_START} ${GLAD_GL} )
target_link_libraries( test ${OPENGL_LIBRARIES} glfw )
仅当 cmake 说它确实找到多个 OpenGL 库时才需要 set(OpenGL_GL_PREFERENCE "GLVND")
我在以下人员的帮助下构建了此解决方案: https://github.com/juliettef/GLFW-CMake-starter