Visual Studioでcmarkをビルドする

CommonMarkのC言語向けのリファレンス実装であるcmarkを、Visual Studioでビルドする手順を残す。

確認バージョンなど

  • cmark 2019/05/01にcheckoutしたもの
  • Microsoft Visual Studio Community 2019 Version 16.0.4
  • Visual Studio Tools for CMake 1.0

cmakeの準備

cmarkのビルドにはcmakeが利用されているので、cmakeが使えるようになっている事を確認する必要がある。通常、Visual Studio Installerで「C++によるデスクトップ開発」にチェックを付けて標準構成でインストールしていれば、セットアップも完了している筈である。

Visual Studioコマンドプロンプトから以下のコマンドを実行すれば、現在の状況が確認できる。

>cmake -version
cmake version 3.13.19031502-MSVC_2

CMake suite maintained and supported by Kitware (kitware.com/cmake).

Makefile.nmakeの編集

ソースコードはutf-8で書かれていて、そのままでは warning C4819 が大量に表示される。無視しても基本的に問題は無いが精神衛生上よろしくないので、コンパイラにutf-8で入出力を行うよう指示する。

		-D CMAKE_C_FLAGS=/utf-8 \

加えてビルドタイプも指定するが、checkoutしたプロジェクトのrootにあるCMakeLists.txtによれば、未指定時にデフォルトでReleaseが指定されてるようなので、必ずしも必要ではない。

BUILD_TYPE=Release

ビルド開始

あとはVisual Studioコマンドプロンプトでcheckoutしたプロジェクトのrootに移動し、nmakeを実行すれば新しく生成される/build/windows内に必要なヘッダやライブラリとコンソールツールが生成される。

nmakeを実行するときinstallモードを指定する。installモードを指定しない場合は生成物だけが/build内にある状態になり、利用する際に必要なヘッダファイルなどを自分で拾い集めないとならない。

D:\Projects\github\commonmark>nmake install
        cd build &&  cmake  -G "NMake Makefiles"  -D CMAKE_BUILD_TYPE=Release  -D CMAKE_INSTALL_PREFIX=windows  -D CMAKE_C_FLAGS=/utf-8  .. &&  cd ..
-- The C compiler identification is MSVC 19.20.27508.1

~~~省略~~~

[ 43%] Built target libcmark_static
[ 47%] Built target cmark
[ 91%] Built target libcmark
[100%] Built target api_test
Install the project...
-- Install configuration: "Release"
-- Installing: D:/Projects/github/commonmark/build/windows/bin/msvcp140.dll
-- Installing: D:/Projects/github/commonmark/build/windows/bin/vcruntime140.dll
-- Installing: D:/Projects/github/commonmark/build/windows/bin/concrt140.dll
-- Up-to-date: D:/Projects/github/commonmark/build/windows/bin
-- Installing: D:/Projects/github/commonmark/build/windows/bin/cmark.exe
-- Installing: D:/Projects/github/commonmark/build/windows/lib/cmark.lib
-- Installing: D:/Projects/github/commonmark/build/windows/bin/cmark.dll
-- Installing: D:/Projects/github/commonmark/build/windows/lib/cmark_static.lib
-- Installing: D:/Projects/github/commonmark/build/windows/lib/pkgconfig/libcmark.pc
-- Installing: D:/Projects/github/commonmark/build/windows/include/cmark.h
-- Installing: D:/Projects/github/commonmark/build/windows/include/cmark_export.h
-- Installing: D:/Projects/github/commonmark/build/windows/include/cmark_version.h
-- Installing: D:/Projects/github/commonmark/build/windows/lib/cmake/cmark.cmake
-- Installing: D:/Projects/github/commonmark/build/windows/lib/cmake/cmark-release.cmake

自分のプロジェクトで利用する

DLLを利用する場合と、static libraryを利用する場合で多少異なる。また、NODE_*で重複定義に関する警告やエラーが表示される場合は、cmark.hのinclude前にCMARK_NO_SHORT_NAMESをdefineする。

dllを利用する場合

  1. cmark.hをincludeする。
  2. cmark.libをプロジェクトにlinkする。
  3. cmark.dllを生成したexeファイルと同じフォルダに置く。

static libraryを利用する場合

  1. CMARK_STATIC_DEFINEをdefineする。
  2. CMARK_STATIC_DEFINE定義より後でcmark.hをincludeする。
  3. cmark_static.libをプロジェクトにlinkする。