如何编译GLUT+;linux中使用CMake和Kdevelop的OpenGL项目?
正如标题所说,我似乎无法使用OpenGL和Glut构建项目 我得到OpenGL函数的未定义引用错误 我试着做:如何编译GLUT+;linux中使用CMake和Kdevelop的OpenGL项目?,linux,opengl,cmake,Linux,Opengl,Cmake,正如标题所说,我似乎无法使用OpenGL和Glut构建项目 我得到OpenGL函数的未定义引用错误 我试着做: project(testas) find_package(OpenGL) find_package(GLUT) add_executable(testas main.cpp) 但这不起作用 有什么建议吗?find\u package(OpenGL)将为您找到该包,但它不会将该包链接到目标 要链接到库,可以使用target\u link\u libraries()。此外,还需要设置包含
project(testas)
find_package(OpenGL)
find_package(GLUT)
add_executable(testas main.cpp)
但这不起作用
有什么建议吗?find\u package(OpenGL)
将为您找到该包,但它不会将该包链接到目标
要链接到库,可以使用target\u link\u libraries()
。此外,还需要设置包含目录
,以便链接器知道在哪里查找内容。这是通过include\u目录
完成的
一个示例CMakeLists.txt
可以这样做:
cmake_minimum_required(VERSION 2.8)
project(testas)
add_executable(testas main.cpp)
find_package(OpenGL REQUIRED)
find_package(GLUT REQUIRED)
include_directories( ${OPENGL_INCLUDE_DIRS} ${GLUT_INCLUDE_DIRS} )
target_link_libraries(testas ${OPENGL_LIBRARIES} ${GLUT_LIBRARY} )
如果<代码> opengl 是您的项目的必需品,您可以考虑在代码< > FIDHOLL包(OpenGL)或使用<代码>要求的< /代码>之后,测试<代码> > OpenGLX发现/<代码>,如果没有找到<代码> OpenGL < /代码>,它将停止<代码> Cugs<代码>。p> 有关更多信息和更好的示例:
- CMake 2.8文档
- CMake 2.8文档
- CMake wiki:
- 论坛帖子及解决方案:
- CMake的教程
特别是,
cmakewiki
和CMake和opengl
链接应该为您提供足够的信息,让事情正常运行 我使用这两个cmake文件来构建我的OpenGL项目,它们都工作得很好
我只在Deepin Linux下测试这两个cmake文件。DeepinLinux是一个中国开发的Linux系统,类似于Ubuntu或Debian。
首先,主要是CMakeLists.txt
其次,在CMakeModules目录下查找GLUT cmake文件
在CMake(3.10+)的最新版本中,有一种使用所谓导入目标的OpenGL的新方法:
目前唯一的实际区别似乎是在Linux上(如果可用的话,可以使用GLVND),但这个解决方案应该更适合未来,由于CMake有更多关于您意图的信息和其他工具,解析您的CMake文件将更好地理解依赖关系树。最近,您可以使用
GLUT::GLUT
:
cmake_minimum_required(VERSION 2.8)
project(testas)
find_package(OpenGL REQUIRED)
find_package(GLUT REQUIRED)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} OpenGL::GL GLUT::GLUT)
谢谢你的回答。现在我得到的错误是,它没有找到它们,我确实安装了它们<代码>/usr/bin/ld:错误:找不到-lOpenGL/usr/bin/ld:错误:找不到-lGLUT哎呀,在答案中键入了
目标链接库
。现在已修复,并检查它是否正常工作。:)我认为链接到OpenGL
或GLUT
没有问题,那么?这种错误表明未安装GLUT\u Xi
和GLUT\u Xmu
(cmake未找到它们)。如果你在Ubuntu上,请检查。如果没有,请尝试为您的系统安装GLUT\u Xi
和GLUT\u Xmu
。谢谢!这就去掉了那些。。但还有一个问题仍然存在,这次你也能帮我吗?我觉得没希望了。您可能想更新您的答案,以使用导入的目标,如target\u link\u库(testas PRIVATE OpenGL::openglut::GLUT)
。然后你就不需要include\u directories()
之类的东西了。cmake_最小值也应该更新,但我真的不记得什么是最小值。我想那是3.0,有了3.6你肯定安全了。这对我在GitHub项目的macOS Mojave 10.14.3上起到了作用,vsthost
wtrsltnk注意,我必须在Mac上使用${GLUT\u LIBRARIES}
(复数)(在我的例子中是Big Sur 11.2),你必须回到目标链接库(testas${OPENGL_LIBRARIES}${GLUT_LIBRARY})
因为苹果自己的OPENGL没有OPENGL::OPENGL
目标。
# Try to find the FREEGLUT library
#
# FREEGLUT_INCLUDE_DIR
# FREEGLUT_LIBRARY
# FREEGLUT_FOUND
FIND_PATH(
FREEGLUT_INCLUDE_DIR GL/freeglut.h GL/gl.h GL/glu.h GL/glew.h
${CMAKE_INCLUDE_PATH}
$ENV{include}
${OPENGL_INCLUDE_DIR}
/usr/include
/usr/local/include
)
SET(STORE_CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK})
SET(CMAKE_FIND_FRAMEWORK NEVER)
FIND_LIBRARY(
FREEGLUT_LIBRARY
NAMES freeglut_static freeglut glut GL
PATH
/opt/local/lib
${CMAKE_LIBRARY_PATH}
$ENV{lib}
/usr/lib
/usr/local/lib
)
SET(CMAKE_FIND_FRAMEWORK ${STORE_CMAKE_FIND_FRAMEWORK})
IF (FREEGLUT_INCLUDE_DIR AND FREEGLUT_LIBRARY)
SET(FREEGLUT_FOUND TRUE)
ENDIF (FREEGLUT_INCLUDE_DIR AND FREEGLUT_LIBRARY)
IF (FREEGLUT_FOUND)
IF (NOT FREEGLUT_FIND_QUIETLY)
MESSAGE(STATUS "Found FREEGLUT: ${FREEGLUT_LIBRARY}")
ENDIF (NOT FREEGLUT_FIND_QUIETLY)
ELSE (FREEGLUT_FOUND)
IF (FREEGLUT_FIND_REQUIRED)
MESSAGE(FATAL_ERROR "Could not find FREEGLUT")
ENDIF (FREEGLUT_FIND_REQUIRED)
ENDIF (FREEGLUT_FOUND)
cmake_minimum_required(VERSION 3.10)
project(testas)
add_executable(testas main.cpp)
find_package(OpenGL REQUIRED COMPONENTS OpenGL)
find_package(GLUT REQUIRED)
add_dependencies(testas OpenGL::OpenGL)
include_directories(${GLUT_INCLUDE_DIRS} )
target_link_libraries(testas OpenGL::OpenGL ${GLUT_LIBRARY} )
cmake_minimum_required(VERSION 2.8)
project(testas)
find_package(OpenGL REQUIRED)
find_package(GLUT REQUIRED)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} OpenGL::GL GLUT::GLUT)