Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编译GLUT+;linux中使用CMake和Kdevelop的OpenGL项目?_Linux_Opengl_Cmake - Fatal编程技术网

如何编译GLUT+;linux中使用CMake和Kdevelop的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()。此外,还需要设置包含

正如标题所说,我似乎无法使用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()
。此外,还需要设置
包含目录
,以便链接器知道在哪里查找内容。这是通过
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)