web-dev-qa-db-ja.com

LinuxでCMakeとKdevelopを使用してGLUT + OpenGLプロジェクトをコンパイルする方法

タイトルにあるように、OpenGLとGlutでプロジェクトをビルドすることはできないようです。

OpenGL関数の未定義参照エラーが発生します。

私はやってみました:

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

しかし、それは機能しません。

助言がありますか?

34
Ren

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がプロジェクトに必要な場合は、find_package(OpenGL)の後に_OpenGL_FOUND_をテストするか、REQUIREDが見つからない場合はcmakeを停止するOpenGLを使用することを検討できます。

詳細とより良い例については:

特に、_CMake wiki_および_cmake and opengl_リンクは、物事を機能させるのに十分なはずです。

77
simont

CMakeの最近のバージョン(3.10以降)では、いわゆるIMPORTEDターゲットを使用して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を解析する意図やその他のツールに関する情報がより多く含まれているため、このソリューションはより将来性が高いはずです依存関係ツリー。

3
minexew