びわの家ブログ

CMakeでvisualstudioのプロジェクトを作成する

私的なvisualsutdioのプロジェクト/ソリューションをgithubで管理する際に当然ながらそのまま.slnなどをあげるだけでは動かなかったのでCMakeを使って生成することにした。(業界スタンダードっぽかったので)

やってみて思ったが非常に面倒なので何か別の方法orもっとかんたんな生成フローがあれば知りたい。

逆引き辞典のようにやったことをメモしていく。随時更新。

とりあえず試しに生成

CMakeでプロジェクトを作成する
https://qiita.com/Lacty/items/d02eeba72dde2b875c31

この記事を見ながらビルドすればとりあえずどんなもんか試せる。

最終的にコマンドラインでやりたいので上記記事の状況だとコマンドプロンプトで

cd vs2015
cmake ../ -G "Visual Studio 15 2017"

とかやればいける。。と思う。

CMakeファイル関連の謎ファイルがたくさん生成されるの結構不満ポイント高い。
各ディレクトリにcmakelists.txtが必要なのも

プロジェクトに必要なファイルを追記していく

不満は慣れや今後の改善でどうにかするとしてcmakelists.txtのadd_executableにファイルを追加していく。

以下の記事が参考になった。

ごく簡単なcmakeの使い方
https://qiita.com/termoshtt/items/539541c180dfc40a1189

自分のプロジェクトではライブラリの管理にnugetも使用していたのでpackage.configはどうしようと思ったが、これも同じようにadd_executableに追加で問題なかった。

だめだった。CMakeLists.txtに以下のようなconfigure_fileの行を追記COPYONLYでコピーするらしい。
環境変数
${CMAKE_SOURCE_DIR}: CMakeを実行した位置
${CMAKE_CURRENT_BINARY_DIR}: CMakeLists.txtで生成されるprojectのディレクトリ
だと思う。

configure_file(${CMAKE_SOURCE_DIR}/D3D12_Project/packages.config ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)

Nugetの復元

Nugetの復元もCMakeでやる方法があるかと思いぐぐってみても以下のようなstackoverflowくらいであんまりいい情報がなかった。
https://stackoverflow.com/questions/18132987/cmake-and-msvs-nuget

ここで長引くのもあれなのでbatファイルのcmakeのあとにnuget restoreを書いた。

おそらくCmakeとNugetって一緒に使うものではなさそう。
だが読んでる本のサンプルがNuget使ってるので一旦そっちに合わせる。

リンカーのサブシステムをWindowsにする

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:WINDOWS")


ポストビルドを設定する

add_custom_commandでプロジェクトが設定できる。
/Pとかが何かとかぶってエラーになるので、\を重ねてエスケープしている。

add_custom_command(TARGET D3D12_Project POST_BUILD
 COMMAND copy /Y
 "C:\\Program Files (x86)\\Windows Kits\\10\\Redist\\D3D\\x64\\dxcompiler.dll"
 "$(TargetDir)dxcompiler.dll"
)



add_executableなファイルをワイルドカードで指定する

このような感じで書けばワイルドカード指定ができる。

file(GLOB SOURCE *.h *.cpp)
file(GLOB LIB_SOURCE libs/*.h libs/*.cpp)

add_executable(D3D12_Project
 ${SOURCE}
 ${LIB_SOURCE}
)


windows環境変数

$ENV{}で参照する

"$ENV{VK_SDK_PATH}\\Lib"