-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
86 lines (62 loc) · 3.25 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# CMakeの使い方
# 1. プロジェクトディレクトリでmkdir build
# 2. cd build
# 3. cmake ..
# 4. make install
# 5. cd ..
# 6. ./build/ghost
# 最小CMakeバージョンを指定
cmake_minimum_required(VERSION 3.10)
# プロジェクト名とバージョンを指定
project(GHOST VERSION 1.0 LANGUAGES CXX)
# 必要な外部ライブラリをすべて探す
# OpenALを探す
find_package(OpenAL REQUIRED)
find_package(glfw3 REQUIRED) # GLFWを探す
# GLEWを探す
find_package(GLEW REQUIRED)
# Freetypeを探す
find_package(Freetype REQUIRED)
# 使用するコンパイラの指定(オプション)
set(CMAKE_CXX_STANDARD 17) # C++17を使用
# ソースファイルを自動取得(カレントディレクトリ内のすべての .cpp ファイルを取得)
file(GLOB_RECURSE SOURCE_CPP_FILES "*.cpp")
# ソースファイルを自動取得(カレントディレクトリ内のすべての .c ファイルを取得)
file(GLOB_RECURSE SOURCE_C_FILES "*.c")
# ソースファイルを自動取得(カレントディレクトリ内のすべての .hpp ファイルを取得)
file(GLOB_RECURSE HEADER_CPP_FILES "*.hpp")
# ソースファイルを自動取得(カレントディレクトリ内のすべての .h ファイルを取得)
file(GLOB_RECURSE HEADER_C_FILES "*.h")
# ビルドディレクトリ(CMAKE_BINARY_DIR)を除外
list(FILTER SOURCE_CPP_FILES EXCLUDE REGEX "${CMAKE_BINARY_DIR}/.*")
list(FILTER SOURCE_C_FILES EXCLUDE REGEX "${CMAKE_BINARY_DIR}/.*")
list(FILTER HEADER_CPP_FILES EXCLUDE REGEX "${CMAKE_BINARY_DIR}/.*")
list(FILTER HEADER_C_FILES EXCLUDE REGEX "${CMAKE_BINARY_DIR}/.*")
# すべてのファイルをSOURCE_FILESに結合
list(APPEND SOURCE_FILES ${SOURCE_CPP_FILES} ${SOURCE_C_FILES} ${HEADER_CPP_FILES} ${HEADER_C_FILES})
# ターゲットのインクルードディレクトリ設定(インクルードディレクトリはtarget_include_directoriesを使って指定)
include_directories(${PROJECT_SOURCE_DIR}) # プロジェクトソースディレクトリを追加
# すべてのソースファイルで実行可能ファイルを作成
add_executable(GHOST ${SOURCE_FILES})
# GLEWライブラリをリンク
target_link_libraries(GHOST PRIVATE GLEW::GLEW)
# Freetypeライブラリをリンク
target_link_libraries(GHOST PRIVATE Freetype::Freetype)
# OpenAL ライブラリをリンク
target_link_libraries(GHOST PRIVATE OpenAL::OpenAL)
# GLFW ライブラリをリンク
target_link_libraries(GHOST PRIVATE glfw)
# GLMの実験的な拡張を有効にする(ターゲットに定義を追加)
target_compile_definitions(GHOST PRIVATE GLM_ENABLE_EXPERIMENTAL)
# インクルードディレクトリの追加(GLEWとFreetypeのインクルードディレクトリを明示的に設定)
target_include_directories(GHOST
PRIVATE
${GLEW_INCLUDE_DIRS} # GLEWのインクルードディレクトリ
${FREETYPE_INCLUDE_DIRS} # Freetypeのインクルードディレクトリ
)
# インストールの設定
install(TARGETS GHOST DESTINATION bin)
# 必要に応じて、ライブラリをさらにリンクする場合
# target_link_libraries(GHOST PRIVATE AnotherLibrary)
# CMakeが生成するMakefileに含めるカスタムコマンド(オプション)
# add_custom_command(...)