4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Siv3DAdvent Calendar 2020

Day 17

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

Last updated at Posted at 2020-12-16

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

4
2
0

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
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?