如何用linux中的CMake和Kdevelop编译GLUT + OpenGL项目?

时间:2012-02-27 04:58:32

标签: linux opengl cmake

正如标题所说,我似乎无法使用OpenGL和Glut构建项目。

我收到OpenGL函数的未定义引用错误。

我尝试过:

project(testas)
find_package(OpenGL)
find_package(GLUT)
add_executable(testas main.cpp)

但这不起作用。

有什么建议吗?

4 个答案:

答案 0 :(得分:70)

find_package(OpenGL)会为您找到该包,但它不会将包链接到目标。

要链接到库,您可以使用target_link_libraries(<target> <item>)。此外,您还需要设置include directory,以便链接器知道在哪里查找内容。这是通过include_directories完成的。

执行此操作的示例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,则可以考虑在OpenGL_FOUND之后测试find_package(OpenGL)或使用REQUIRED,如果cmake找不到OpenGL

有关更多信息和更好的示例:

特别是,CMake wikicmake and opengl链接应该足以让您完成任务。

答案 1 :(得分:3)

在最新版本的CMake(3.10+)中,有一种使用所谓的 IMPORTED target 的新方法来使用OpenGL:

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} )

目前唯一的实际区别似乎是在Linux上(如果可用,则使用GLVND),但是大概此解决方案应该更适合未来,因为CMake会提供有关您的意图的更多信息以及其他解析CMakeFiles的工具更好地了解依赖关系树。

答案 2 :(得分:0)

最近您可以使用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)

答案 3 :(得分:-4)

我使用这两个cmake文件来构建我的OpenGL项目,它们都运行良好。

我只在Deepin Linux下测试这两个cmake文件。 Deepin Linux是一个中国成长的Linux系统,如Ubuntu或Debian。

  

首先,主要是CMakeLists.txt

npm run eject
  

其次,查找CMakeModules目录下的GLUT cmake文件

Remove untracked files, stash or commit any changes, and try again.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! todoevents@0.1.0 eject: `react-scripts eject`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the todoevents@0.1.0 eject script.
npm ERR! This is probably not a problem with npm. There is likely additional 
logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\Pigpigever\AppData\Roaming\npm-cache\_logs\2017-08-
14T09_03_14_398Z-debug.log