2012年10月24日水曜日

エディタ=Visual Studio な人のためのメイクファイルプロジェクト

Visual Studio にはメイクファイルプロジェクトというものがあります。

メイクファイルプロジェクトでは、ビルド/クリーン/リビルドのコマンドを設定します。
このコマンドにはユーザーが自由に処理を書けるので。
Visual Studio にはないコンパイラを使うこともでき、インテリセンスの恩恵を受けることができます。
makefile を使った例
makefile でビルドするプロジェクトを Visual Studio を使って開発する例です。

  1. まずは、プロジェクトを作成します。
    メイクファイルプロジェクトを選択し、コマンドを設定します。


    (今回は、make でビルド、make clean でクリーンできるものとします。)
  2. この状態でもすでにビルドできます。
    F7 でビルドしてみましょう。

  3. 次に、インテリセンスの恩恵を受けるためにコードをプロジェクトに追加します。
    インクルードパスが通っていないと、インテリセンスが動作しないのでパスも通します。
    (プリプロセッサの定義などもあれば設定します。)
    これでインテリセンスが機能します。

  4. ログをカスタマイズする。
    ビルドログは出力ウィンドウに表示されますが、メッセージは makefile の出したそのままのメッセージです。
    このままでは、エラーウィンドウにエラー情報が表示されませんし、ログから該当コードにジャンプもできません。
    これに対応するために、Visual Studio が認識できるフォーマットでログを出力するようにします。
    build.bat ファイルを新規作成し、以下のようにログを加工します。(一例です。)
    @echo off
    
    SET LANG=ja_JP.SJIS
    bash -c "make --no-print-directory %*" 2> build_log.txt
    if errorlevel 1 (
        sed -e "s/:\([0-9]*\):[0-9]*:/(\1):/g" build_log.txt | sed -e "s/\/cygdrive\/\([a-z]\)/\1:/g"
        del /F build_log.txt
        exit /b 1
    ) else (
        sed -e "s/:\([0-9]*\):[0-9]*:/(\1):/g" build_log.txt | sed -e "s/\/cygdrive\/\([a-z]\)/\1:/g"
        del /F build_log.txt
        exit /b 0
    )
    
    ビルドコマンドを build.bat に変更し、ビルドを実行します。
    これでエラー一覧にエラーが表示されるようになりました。


HTML でも Visual Studio
Visual Studio で HTML ファイルを開くと色付きで表示してくれます。
また、閉じてないタグや存在しないパスなど警告を表示してくれます。


これだけではつまらないので、メイクファイルプロジェクトを利用して htmllint をかけたいと思います。
(htmllint はこちらからダウンロードしました)

iutest での使用を例に説明します。
まずは、Makefile と build.bat を用意します。

Makefile:
#!/usr/bin/make 

LANG=ja_JP.SJIS
HTMLLINT_PATH=$(subst \,/, $(HTMLLINT_ROOT))

default: target

all: target lint

target: Doxyfile
    doxygen Doxyfile

lint:
    (find ../ -maxdepth 1 -type f -name "*.html" -print0 | xargs -0 perl $(HTMLLINT_PATH)/htmllint)


build.bat:
@echo off

SET PATH=c:\cygwin\bin;%PATH%
SET LANG=ja_JP.SJIS
bash -c "make --no-print-directory %*" > build_log.txt
if errorlevel 1 (
    sed -e "s/: [0-9]*:/: error:/g" build_log.txt | sed -e "s/\/cygdrive\/\([a-z]\)/\1:/g"
    del /F build_log.txt
    exit /b 1
) else (
    sed -e "s/: [0-9]*:/: error:/g" build_log.txt | sed -e "s/\/cygdrive\/\([a-z]\)/\1:/g"
    del /F build_log.txt
    exit /b 0
)

make lint
で、htmllint が実行されます。
build.bat はその出力を Visual Studio が対応している書式に変更します。

Visual Studio の設定は、ビルドコマンドに "build.bat lint" とするだけです。



実行すると以下のように結果が表示されます。
一覧から該当ファイルの行にジャンプできるので、修正がはかどります。


まとめ
このように、メイクファイルプロジェクトを使えば通常 Visual Studio では扱えないプロジェクトも管理でき、
Visual Studio IDE の機能の恩恵を受けることができます。

ここまで高価な専門ツールである Visual Studio のことを紹介してきましたが、
メイクファイルプロジェクトは Express Edition でも使用出来るのでご安心ください。


4 件のコメント:

  1. これを使えば、mingw等でのコンパイル&ビルドが可能立ったりするのでしょうか?

    返信削除
    返信
    1. 前回匿名でコメントしたものです。
      やはり可能なんですね!
      個人的なお願いだったりするのですが、これのMinGW版の設定方法書いたブログとか書いていただけないでしょうか?
      srz_zumixさんが可能ならでいいのですが。。

      英語サイトならこういうのいくらかみたのですが、私が英語を敬遠してるとこがあって日本語のサイトでこういうのないかなと探してる毎日であります(汗

      削除
    2. 既に MinGW でのビルド環境があるのであれば、そのビルドコマンドを呼び出すだけです。
      「makefile を使った例」を参考に試してみてください。

      ブログに書く件ですが、私は MinGW を(ほとんど)使わないですし、日本語の情報もたくさんありますので、私が記事にすることは多分ないです。ご了承ください。

      削除