Microsoft Visual Studio 14.0でVimをビルドする。
今までMacBook AirのTerminal上でvimをビルドするか、もしくはWindowsのMinGWでビルドしていました。 今回、Microsoft Visual Studio 14.0でビルドをしてみました。 で、ビルドしてみたけど結構はまりどころがあったのでここに適当にまとめます。
まず、最終的にできた私のビルドスクリプトを載せておきます。
vimbuild.bat
@echo off set PATH=%SystemRoot% set PATH=%PATH%;%SystemRoot%\System32 set PATH=%PATH%;%SystemRoot%\System32\Wbem set PATH=%PATH%;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin set INCLUDE= set LIBPATH= call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\vcvars32.bat" set OPT1= IME=yes MBYTE=yes ICONV=yes CSCOPE=yes NETBEANS=no set OPT2= PLATFORM=x86 SDK_INCLUDE_DIR="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include" XPM=no pushd .\vim\src nmake -f Make_mvc.mak %OPT1% %OPT2% GUI=no clean nmake -f Make_mvc.mak %OPT1% %OPT2% GUI=yes clean nmake -f Make_mvc.mak %OPT1% %OPT2% GUI=no nmake -f Make_mvc.mak %OPT1% %OPT2% GUI=yes popd
はまりどころ
Microsoft Visual Studio 14.0でVimをビルドする上で注意した方がいいオプションが以下になります。
INCLUDE, LIBPATH
これは直接的にはVimに関係ないけど、vcvars32.bat
はINCLUDE
とLIBPATH
にどんどん値を追加していくようになっていて、
vcvars32.bat
を20回くらい呼ぶと限界を超え、以下のエラーになります。
入力行が長すぎます。 コマンドの構文が誤っています。
なので、vcvars32.bat
を呼ぶ前に初期化しておくとよいです。
set INCLUDE= set LIBPATH= call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\vcvars32.bat"
PLATFORM
私のビルド環境がPLATFORM=MCD
だったのですが、Make_mvc.mak
はMCDのプラットフォームに対応してないっぽいので
以下のエラーになってしまいました。
Microsoft(R) Program Maintenance Utility Version 14.00.23918.0 Copyright (C) Microsoft Corporation. All rights reserved. Make_mvc.mak(228) : fatal error U1050: *** ERROR Unknown target platform "MCD". Make aborted. Stop.
なので、私は対応しているPLATFORM=x86
にして対処してみました。
PLATFORM=x86
SDK_INCLUDE_DIR
ビルドにはWin32.mak
を必要らしく、SDK_INCLUDE_DIR
を設定していないと以下のエラーになってしまいます。
Microsoft(R) Program Maintenance Utility Version 14.00.23918.0 Copyright (C) Microsoft Corporation. All rights reserved. Make_mvc.mak(254) : fatal error U1052: ファイル 'Win32.mak' が見つかりません。 Stop.
なので、SDK_INCLUDE_DIR
にWin32.mak
があるフォルダを指定します。
SDK_INCLUDE_DIR="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include"
XPM
Vimはpre-compiledなXPMがレポジトリに含まれていて、それがLIBC.libにリンクしているみたいです。
@rbtnn 恐ろしいことにXPMはpre-compiledなライブラリがVimのレポジトリに含まれてるんですよ。それがLIBC.libにリンクしているという寸法でして。
— MURAOKA Taro (@kaoriya) 2016年6月25日
最近のMicrosoft Visual StudioはLIBC.libを含んでいないため、以下のようなエラーが出てしまいます。
link /RELEASE /nologo /subsystem:windows /LTCG:STATUS -out:gvim.exe .\ObjGi386\blowfish.obj .\ObjGi386\buffer.obj .\ObjGi386\charset.obj .\ObjGi386\crypt.obj .\ObjGi386\crypt_zip.obj .\ObjGi386\diff.obj .\ObjGi386\digraph.obj .\ObjGi386\edit.obj .\ObjGi386\eval.obj .\ObjGi386\ex_cmds.obj .\ObjGi386\ex_cmds2.obj .\ObjGi386\ex_docmd.obj .\ObjGi386\ex_eval.obj .\ObjGi386\ex_getln.obj .\ObjGi386\fileio.obj .\ObjGi386\fold.obj .\ObjGi386\getchar.obj .\ObjGi386\hardcopy.obj .\ObjGi386\hashtab.obj .\ObjGi386\json.obj .\ObjGi386\main.obj .\ObjGi386\mark.obj .\ObjGi386\mbyte.obj .\ObjGi386\memfile.obj .\ObjGi386\memline.obj .\ObjGi386\menu.obj .\ObjGi386\message.obj .\ObjGi386\misc1.obj .\ObjGi386\misc2.obj .\ObjGi386\move.obj .\ObjGi386\normal.obj .\ObjGi386\ops.obj .\ObjGi386\option.obj .\ObjGi386\os_mswin.obj .\ObjGi386\winclip.obj .\ObjGi386\os_win32.obj .\ObjGi386\pathdef.obj .\ObjGi386\popupmnu.obj .\ObjGi386\quickfix.obj .\ObjGi386\regexp.obj .\ObjGi386\screen.obj .\ObjGi386\search.obj .\ObjGi386\sha256.obj .\ObjGi386\spell.obj .\ObjGi386\syntax.obj .\ObjGi386\tag.obj .\ObjGi386\term.obj .\ObjGi386\ui.obj .\ObjGi386\undo.obj .\ObjGi386\window.obj .\ObjGi386\vim.res .\ObjGi386\gui.obj .\ObjGi386\gui_beval.obj .\ObjGi386\gui_w32.obj .\ObjGi386\os_w32exe.obj .\ObjGi386/if_cscope.obj .\ObjGi386/channel.obj .\ObjGi386/xpm_w32.obj .\ObjGi386\version.obj oldnames.lib kernel32.lib advapi32.lib shell32.lib gdi32.lib comdlg32.lib ole32.lib uuid.lib /machine:i386 gdi32.lib version.lib winspool.lib comctl32.lib advapi32.lib shell32.lib /machine:i386 libcmt.lib user32.lib WSock32.lib xpm\x86\lib\libXpm.lib /PDB:gvim.pdb -debug LINK : fatal error LNK1104: ファイル 'LIBC.lib' を開くことができません。 NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\link.EXE"' : リターン コード '0x450' Stop.
なので、XPM=no
にして対処しました。
環境
- Windows 10 Home Intel(R) Celeron(R) CPU N2840 @ 2.16GHz 2.16GHz 64ビットオペレーティングシステム x64ベースプロセッサ
- Vim 7.4.1913
- cmd.exe (Microsoft Windows [Version 10.0.10586])