OpenSiv3DのLinux版が、クローンしてきたファイルのOpenSiv3D/Linux/App
でしかビルドできないのが面倒くさいので、make install
に対応させる。
以下のパッチをdiff.patch
として保存し、
diff.patch
diff --git a/Linux/CMakeLists.txt b/Linux/CMakeLists.txt
index f59da581..fe1e7c97 100644
--- a/Linux/CMakeLists.txt
+++ b/Linux/CMakeLists.txt
@@ -2,7 +2,7 @@ cmake_minimum_required (VERSION 3.0)
find_package(PkgConfig)
-project(OpenSiv3D_Linux CXX)
+project(Siv3D VERSION 0.4.3 LANGUAGES CXX)
enable_language(C)
set(CMAKE_CXX_FLAGS "-std=c++17 -Wall -Wextra -Wno-unknown-pragmas -fPIC -msse4.1 -D_GLFW_X11")
@@ -26,10 +26,8 @@ endif()
#set(CMAKE_BUILD_TYPE Release)
pkg_check_modules(LIBSIV3D REQUIRED glib-2.0 gobject-2.0 gio-2.0 gl libpng libturbojpeg x11 xi xinerama xcursor xrandr gl glu freetype2 openal opencv4 ogg vorbis zlib)
-include_directories(
- "/usr/include"
- "."
+set(INCLUDE_DIRS
"../Siv3D/include"
"../Siv3D/src/Siv3D"
"../Siv3D/src/Siv3D-Platform/Linux"
@@ -725,6 +723,22 @@ set(SOURCE_FILES
add_library(Siv3D STATIC ${SOURCE_FILES})
-target_link_libraries(Siv3D
-)
-
+install(DIRECTORY ../Siv3D/include/ DESTINATION include/Siv3D)
+find_package(Boost REQUIRED COMPONENTS filesystem)
+target_link_libraries(Siv3D GLEW pthread dl udev freetype harfbuzz glib-2.0 gobject-2.0 gio-2.0 png turbojpeg gif webp openal ogg vorbis vorbisenc vorbisfile /usr/local/lib/libboost_filesystem.a avformat avcodec avutil swresample ${LIBSIV3D_LIBRARIES})
+target_include_directories(Siv3D PUBLIC
+ $<BUILD_INTERFACE:${INCLUDE_DIRS}>
+ $<INSTALL_INTERFACE:include/Siv3D>
+ $<INSTALL_INTERFACE:include/Siv3D/ThirdParty>)
+install(TARGETS Siv3D
+ EXPORT Siv3DConfig
+ LIBRARY DESTINATION lib
+ ARCHIVE DESTINATION lib
+ INCLUDES DESTINATION include/Siv3D include/Siv3D/ThirdParty)
+install(EXPORT Siv3DConfig
+ DESTINATION lib/cmake/siv3d
+ EXPORT_LINK_INTERFACE_LIBRARIES)
+include(CMakePackageConfigHelpers)
+set(VERSION_CONFIG ${CMAKE_CURRENT_BINARY_DIR}/Siv3DConfigVersion.cmake)
+write_basic_package_version_file(${VERSION_CONFIG} COMPATIBILITY ExactVersion)
+install(FILES ${VERSION_CONFIG} DESTINATION lib/cmake/siv3d)
$ git apply diff.patch
で適用する。あとはいつもどおり必要なライブラリを入れ、cmakeしたあとに
make install
することにより、デフォルトのパスだと/usr/local/
に必要なファイルがインストールされる。インストールが終わったら、クローンしてきたファイルは要らないので消す。
アプリを作成する際には、以下のCMakeファイルとSiv3Dのソースファイルを同じディレクトリに作成し
CMakeLists.txt
cmake_minimum_required (VERSION 3.0)
project(アプリ名 CXX)
find_package(Siv3D 0.4.3 REQUIRED)
add_executable(アプリ名 Main.cpp)
set_target_properties(アプリ名 PROPERTIES CXX_STANDARD 17)
target_link_libraries(アプリ名 Siv3D)
$ mkdir build && cd build
$ cmake ..
$ make
と唱えるだけで、こんな感じのファイル構成で
CMakeLists.txt
Main.cpp
build/
├──アプリの実行ファイル
└──ビルドのログ等
Siv3Dのインストール先を気にせずにビルドできます。
更に、これができるとfind_packageの第2引数だけで、バージョンを変えられるので、管理がしやすくなります。