導入
visualstudioとc++でゲームエンジンを作っていて、ユーザの作るカスタムスクリプトからdllを作って、エンジンとくっつけたい。そういう思いからcmakeでdllを作る方法を調べた。
実例
以下のリポジトリで公開。
dllはリンク先のままのlibフォルダを見ればok。
ファイル構造
以下の様なファイル構造。
CMakeLists.txtとheaderフォルダとsrcフォルダにそれぞれ.hファイルと.cppファイルが入っています
D:.
│ CMakeLists.txt
│
├─header
│ Enemy.h
│ goodafternoon.h
│ hello.h
│
└─src
Enemy.cpp
goodafternoon.cpp
hello.cpp
CMakeLists.txtの内容は以下。
それぞれの行にコメントを書いているので、それを見て欲しい。
# cmakeのバージョン
cmake_minimum_required(VERSION 3.1)
# プロジェクト名指定
project(oreorelib CXX)
# srcフォルダー以下のcppファイル一覧をcppfilesという変数に格納
file(GLOB_RECURSE cppfiles RELATIVE ${PROJECT_SOURCE_DIR} ./src/*.cpp)
# dllでビルドすると指定
add_library(oreorelib SHARED ${cppfiles})
# c++11
target_compile_features(oreorelib PRIVATE cxx_std_11)
# include ディレクトリ指定
target_include_directories(oreorelib INTERFACE ./header)
実行コマンド
実際にビルドするときのコマンドの例を以下に示す。
mkdir build
cd build
cmake ../ -G"Visual Studio 16 2019"
cmake --build .
# 注意
dllの場合は、以下の様に関数にexportするよ的な記述がないと、外部から使用できないので注意。
exportするシンボルがないと、dllファイルと一緒に出来るlibファイルが出来ないので注意。
extern "C" __declspec(dllexport) void hello();
参考