LoginSignup
2
2

More than 1 year has passed since last update.

DXライブラリをCMakeと併用する方法

Posted at

概要

DXライブラリをCMakeと併用する方法の一つを紹介します。
ここではCMakeの機能を使ってビルド時にDXライブラリをダウンロードしてリンクする方法を紹介します。

GitHubに実際のリポジトリ例を上げてあるので、そちらも併せて参照してください。
ishioka0222/dxlib-with-cmake

他にも、DXライブラリをCMakeと併用する方法には以下のような方法がありますが、これらの方法はここでは紹介しません。

  • DXライブラリをあらかじめリポジトリ外にダウンロードしておき、CMakeLists.txtにその絶対パスをハードコーディングしてリンクする。
    • メリット:複数のリポジトリで同じDXライブラリを共用できるため、PCの容量を節約できる。
    • デメリット:ソースコードをGitHubで公開した際に、それをcloneしてビルドするためにはあらかじめ指定された場所にDXライブラリをダウンロードする必要がある。
  • DXライブラリをあらかじめリポジトリ内にダウンロードしておき、Gitの監視対象に含め、CMakeLists.txtにその相対パスを記述してリンクする。
    • メリット:DXライブラリの更新された場合でもビルドが安定して行える。
    • デメリット:DXライブラリは容量が大きいので、Gitリポジトリの容量を圧迫してしまう。

動作を確認した環境

  • Windows 10
  • Visual Studio 2022(ビルドはコマンドラインもしくはVisual Studio Codeから行いますが、コンパイルにVisual Studio Build Toolsが必要になります )
  • Visual Studio Code
  • DXライブラリ 3.23
  • CMake 3.22.2

手順

以下のようなディレクトリ構成でファイルを作成していきます。

dxlib-with-cmake/
|-- CMakeLists.txt     ... 1
`---src/
    |-- CMakeLists.txt ... 2
    `-- main.cpp       ... 3

1. dxlib-with-cmake/CMakeLists.txt

dxlib-with-cmakeディレクトリ直下のCMakeLists.txtには以下のような内容を記述します。
#から始まる行はコメントです。

# CMakeのバージョンを指定します
# ここは利用しているCMakeのバージョンによって適当な値に変更しても問題ありません
cmake_minimum_required(VERSION 3.22)

# プロジェクト名を設定
project(my-dxlib-project)

# DXLIB_DIRという名前の変数を設定します
# ここではDXLIB_DIRという変数にdxlib-with-cmake/dxlib/のパスが入ります
set(DXLIB_DIR ${CMAKE_SOURCE_DIR}/dxlib)

# 上で設定したDXLIB_DIRのパス、すなわちdxlib-with-cmake/dxlib/に
# DXライブラリをダウンロードして展開します
# https://dxlib.xsrv.jp/DxLib/DxLibNoneModel_NoneSoftDrawCode_VC_3_23.zipの部分で
# DXライブラリのURLを指定しています
# DXライブラリが更新されるたびにこのURLは修正する必要があります
# DXライブラリのURLは https://dxlib.xsrv.jp/dxdload.html で確認できます
# ここでは、DXライブラリの「3Dモデル機能&ソフトウエアレンダリング機能無しパッケージ」を使用しています。
include(ExternalProject)
ExternalProject_Add(DxLibDownload
  URL https://dxlib.xsrv.jp/DxLib/DxLibNoneModel_NoneSoftDrawCode_VC_3_23.zip
  SOURCE_DIR ${DXLIB_DIR}
  CONFIGURE_COMMAND ""
  BUILD_COMMAND ""
  INSTALL_COMMAND ""
)

# `src`ディレクトリをCMakeのビルド対象に追加します
add_subdirectory("./src")

CMakeはExternalProject_Addで追加した外部のプロジェクトを自動でconfigure, build, installする機能があるようですが、DXライブラリはビルド済みなので、その機能をオフにするためにCONFIGURE_COMMAND ""のようなオプションを記述してデフォルトの値を上書きしています。

2. dxlib-with-cmake/src/CMakeLists.txt

srcディレクトリ直下のCMakeLists.txtには以下のような内容を記述します。

add_executable(main "main.cpp")

# 以下でDXライブラリをinclude, linkします
# 注意:この例ではDXライブラリの「3Dモデル機能&ソフトウエアレンダリング機能無しパッケージ」を使用していますが、
# 通常の「DXライブラリ Windows版」を使用する場合にはおそらく以下の部分を修正する必要があります
target_include_directories(main PRIVATE ${DXLIB_DIR})
target_link_directories(main PRIVATE ${DXLIB_DIR})
add_dependencies(main DxLibDownload)

3. dxlib-with-cmake/src/main.cpp

srcディレクトリ直下のmain.cppには以下のような内容を記述します。
ここでは例としてHello, world!と表示するだけのプログラムを記述します。

// 以下の行がないとコンパイルが通りません
#pragma comment(linker, "/subsystem:windows")

#include "DxLib.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine, int nCmdShow) {
  ChangeWindowMode(true);

  if (DxLib_Init() == -1) {
    return -1;
  }

  printfDx("Hello, world!\n");

  WaitKey();

  DxLib_End();

  return 0;
}

4. 実行

この状態で、dxlib-with-cmakeディレクトリの下でコマンドプロンプトを立ち上げ、以下のコマンドを実行するとDXライブラリが自動でダウンロードされ、ビルドが行われます。
回線が遅いとダウンロードに時間がかかるので注意してください。

cmake -S . -B "build"
cmake --build "build"
2
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
2
2