タイトルにあるように、OpenGLとGlutでプロジェクトをビルドすることはできないようです。
OpenGL関数の未定義参照エラーが発生します。
私はやってみました:
project(testas)
find_package(OpenGL)
find_package(GLUT)
add_executable(testas main.cpp)
しかし、それは機能しません。
助言がありますか?
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
_リンクは、物事を機能させるのに十分なはずです。
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を解析する意図やその他のツールに関する情報がより多く含まれているため、このソリューションはより将来性が高いはずです依存関係ツリー。