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を利用する場合
cmark.h
をincludeする。cmark.lib
をプロジェクトにlinkする。cmark.dll
を生成したexeファイルと同じフォルダに置く。
static libraryを利用する場合
CMARK_STATIC_DEFINE
をdefineする。CMARK_STATIC_DEFINE
定義より後でcmark.h
をincludeする。cmark_static.lib
をプロジェクトにlinkする。