macOSでビルドするOpenGLのCMake設定をおこなう

macOSでCMakeを使ってOpenGLプロジェクトをビルドするための最小のCMake設定です。

バージョン情報

$ sw_vers
ProductName:        macOS
ProductVersion:     14.3
BuildVersion:       23D56

$ xcodebuild -version
Xcode 15.2
Build version 15C500b

$ cmake -version
cmake version 3.28.1

CMake suite maintained and supported by Kitware (kitware.com/cmake).

$make --version
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for i386-apple-darwin11.3.0

サンプル

cmake_minimum_required(VERSION 3.16)
project(SampleProject)

set(CMAKE_CXX_FLAGS "-std=c++20")
add_compile_options(-Wall -O2)

add_definitions(-Wno-deprecated-declarations)

find_package(OpenGL REQUIRED)
find_package(GLUT REQUIRED)
include_directories(
    ${OPENGL_INCLUDE_DIR}
    ${GLUT_INCLUDE_DIR}
)

add_executable(
    a.out
    main.cc
)

target_link_libraries(
    a.out
    ${OPENGL_LIBRARIES}
    ${GLUT_LIBRARIES}
)

解説

cmake_minimum_required(VERSION 3.16)
project(SampleProject)

CMakeのバージョンとプロジェクト名を設定しています。

set(CMAKE_CXX_FLAGS "-std=c++20")
add_compile_options(-Wall -O2)

コンパイルオプションを設定しています。

  • -std=c++20 : C++20の有効化
    • add_comple_options にも記載できますが、 CMAKE_CXX_FLAGS に set で設定することが推奨されているみたいです
  • -Wall : 警告の有効化
  • -O2 : 最適化度の設定
    • 0~3がありますが、3は危険で2くらいがちょうどいいみたいです
add_definitions(-Wno-deprecated-declarations)

非推奨の定義の呼び出し警告をオフに設定しています。

最新のmacOSではOpenGLが非推奨であり、Metalを使用することが推奨されています。

それで警告が出るため、このオプションを有効にしておくと良いと思います。(多分)

find_package(OpenGL REQUIRED)
find_package(GLUT REQUIRED)
include_directories(${OPENGL_INCLUDE_DIR} ${GLUT_INCLUDE_DIR})

OpenGLのライブラリを探してきてきます。

macOSに標準でインストールされているOpenGLGLUTを探してきてくれるみたいです。

その後ライブラリのインクルードファイルのディレクトリの場所を設定します。

OPENGL_INCLUDE_DIRGLUT_INCLUDE_DIR といった変数は find_package コマンドで自動定義されます。

add_executable(a.out main.cc)

実行ファイルの設定です。

target_link_libraries(a.out ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES})

各種ライブラリをリンクします。

ここで探してきたOpenGLのライブラリをリンクします。

OPENGL_LIBRARIESGLUT_LIBRARIES といった変数は find_package コマンドで自動定義されます。