LoginSignup
2

More than 1 year has passed since last update.

posted at

updated at

Linux版のOpenSiv3Dをfind_packageでちょっと楽にアプリを作る

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引数だけで、バージョンを変えられるので、管理がしやすくなります。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2