Visual C++ のテキストエディタを変えたい!

Visual C++のエディタがお気に召さない場合は、お気に入りのエディタでソースコードを作成し、メイク(make)ファイルを使って実行ファイルを作成する方法があります。
コンパイル・リンク・実行はバッチ(bat)ファイルを実行するだけです。今回はその方法について説明します。

バッチ(bat)ファイルを実行すると、下記のウインドウが表示され、コンパイルに成功すれば、作成したアプリケーションが実行されます。
Visual Studioのウインドウは立ち上がりません。

makefile

手順

コードファイル、リソースファイル

test.cpp、test.rcを作成します。

batファイル

下記のtest.batファイルを用意し、ソースファイルと同じフォルダに入れます。

test.bat (Visual Studio 2012の場合)
call "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" x86
nmake /NOLOGO -a
if %ERRORLEVEL% == 0 Win32Project1.exe
pause

1行目

vcvarsall.bat のあるフォルダを指定してください。先頭に「call」を、最後に「x86」をつけたものにします。
32bit版のWindowsを使用している場合は、Program Files (x86)フォルダは、Program Filesになります。
Visual Studio 2013の場合は、Microsoft Visual Studio 12.0、
Visual Studio 2012の場合は、Microsoft Visual Studio 11.0、
Visual C++ 2010の場合は、Microsoft Visual Studio 10.0、
Visual C++ 2008の場合は、Microsoft Visual Studio 9.0
になります。

2行目

「nmake」は、メイクファイルを実行するものです。
「/NOLOGO」 は Microsoft のロゴ表示を抑制するオプションです。
「-a」はリビルドに相当します。

3行目

Win32Project1.exe
は、コンパイル・リンクで生成される実行ファイルを指定します。
nmakeでエラーがなかったとき(if %ERRORLEVEL% == 0)のみ実行されます。

4行目(最終行)

最後に「pause」をつければコマンドプロンプトのウインドウが自動で閉じるのを抑制します。
エラーが出たときに役立ちます。

makefileファイル

下記のmakefileファイルを用意し、ソースファイルと同じフォルダに入れます。
日本語があるとうまくいかないときがあるので、すべて半角英数字にします。

makefile
# UserChange

TARGETNAME=Win32Project1
TARGETNAME_C=test
TARGETNAME_R=test
OUTDIR=.\Release

LINK32=link.exe

ALL : "$(OUTDIR)\$(TARGETNAME).exe"

"$(OUTDIR)" :
    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"

# compile

CPPFLAGS=\
    /O2 /Oi /GL\
    /nologo\
    /MT\
    /W3\
    /Fo"$(OUTDIR)\\"\
    /Fd"$(OUTDIR)\\"\
    /c\
    /Zi\
    /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE"\
    /FD\
    /EHsc\
    /MT\
    /Gy\

# link

LINK32_FLAGS=\
    /out:"$(OUTDIR)\$(TARGETNAME).exe"\
    /INCREMENTAL:NO\
    /NOLOGO\
    /MANIFEST\
    /MANIFESTFILE:"$(OUTDIR)\$(TARGETNAME).exe.intermediate.manifest"\
    /MANIFESTUAC:"level='asInvoker' uiAccess='false'"\
    /DEBUG\
    /pdb:"$(OUTDIR)\$(TARGETNAME).pdb"\
    /SUBSYSTEM:WINDOWS\
    /OPT:REF\
    /OPT:ICF\
    /LTCG\
    /DYNAMICBASE\
    /NXCOMPAT\
    /MACHINE:X86\
    /ERRORREPORT:PROMPT kernel32.lib\
        user32.lib\
        gdi32.lib\
        winspool.lib\
        comdlg32.lib\
        advapi32.lib\
        shell32.lib\
        ole32.lib\
        oleaut32.lib\
        uuid.lib\
        odbc32.lib\
        odbccp32.lib

LINK32_OBJS= \
    "$(OUTDIR)\$(TARGETNAME_C).obj"\
    "$(OUTDIR)\$(TARGETNAME_R).res"

# resource compiler

RFLAGS=\
    /d "_UNICODE" /d "UNICODE"\
    /fo"$(OUTDIR)\$(TARGETNAME_R).res"

"$(OUTDIR)\$(TARGETNAME).exe" : "$(OUTDIR)" $(LINK32_OBJS)
    $(LINK32) $(LINK32_FLAGS) $(LINK32_OBJS)

.cpp{$(OUTDIR)}.obj:
    $(CPP) $(CPPFLAGS) $<


.rc{$(OUTDIR)}.res:
    $(RC) $(RFLAGS) $<


TARGETNAME=Win32Project1 ソリューション名(プロジェクト名)
実行ファイル(*.exe)のファイル名と同じです。
環境に合わせて変更してください。
TARGETNAME_C=test Cソースファイル(*.c/*.cpp)のファイル名
環境に合わせて変更してください。
TARGETNAME_R=test リソースファイル(*.rc)のファイル名です。
環境に合わせて変更してください。
OUTDIR=.\Release 実行ファイルを生成するフォルダ
環境に合わせて変更してください。
CPPFLAGS=・・ コンパイルオプション
LINK32_FLAGS=・・・ リンクオプション
RFLAGS=・・・ リソースのオプション

ビルド・実行

test.batを実行すれば、ビルドされ、コンパイルエラーがなければそのまま実行されます。

エラーの対策

NMAKE : fatal error U1073: '".\Release\***.obj"' のビルド方法が指定されていません。

Cソースファイルの名前が間違っていませんか?

NMAKE : fatal error U1073: '".\Release\***.res"' のビルド方法が指定されていません。

リソースファイルの名前が間違っていませんか?