はじめに
Vimのmake
コマンドは便利ですが、任意の名前のMakefileをオプションで指定できそうもありません
(カレントディレクトリのMakefileを探しにいきます)。
そのため所属するプロジェクトでMakefileの格納先ディレクトリや命名規則が規定されている場合は不便です。
そこで本エントリではこの問題の解決策をまとめます。
問題
Cobolプログラムで説明します。
次に示す例では、cobファイルとMakefileを格納しているディレクトリが異なり、
Makefileには<PROGRAM-ID>.makといった名称をつけるルールが定められています。
$ tree . ├── make │ └── hello.mak └── source └── hello.cob
hello.cob
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. PROCEDURE DIVISION. MAIN SECTION. DISPLAY 'HELLO WORLD!!'. STOP RUN.
hello.mak
hello.o : hello.cob cobc -x --free hello.cob
このような環境においてhello.cob
をVimで編集中にmake
したい時、../make/hello.mak
を指定する方法を考えます。
対応策
ただ単にmake
したいだけであれば、:!make -f <makefile_name>
を実行すれば良いです。
しかしこの場合、Quickfixリストが機能しないため良い解決策とは言えないでしょう。
そこでmakeprg
を使用します。
makeprg
を使用することで:make
を実行した時に発行されるコマンドを任意に設定することができます。
次の設定を.vimrcに追加します。
・ノーマルモードでF5を押下した時にCBLCOMP
関数を呼び出す(1行目)
・makeprg
にmake -f ../make/<cob_file_name>.mak
を組み立てて設定(4行目〜8行目)
・make
コマンドを実行(9行目)
.vimrc
001 nnoremap <F5> :call CBLCOMP()<CR> 002 003 function! CBLCOMP() 004 let &makeprg='make -f ' 005 let &makeprg.=expand('%:p:h:h') 006 let &makeprg.='/make/' 007 let &makeprg.=expand('%:t:r') 008 let &makeprg.='.mak' 009 exec ':make' 010 endfunction
これで、Vim上でF5を押すだけで編集中のプログラムに対応したMakefileを指定してmake
を実行し、make結果をQuickfixリストで確認できるようになりました。