マニフェスト(manifest)ファイルを埋め込む

ビジュアルスタイルの表示にするのようにマニフェスト(manifest)ファイルを埋め込む方法を説明します。

手順

1.batファイルの作成

インコのWindowsSDK 〜メイク(make)ファイル1を参考にtest.cpp、test.rc、test.batを作成します。

2.manifest.xml の作成

ビジュアルスタイルの表示にするを参考にmanifest.xmlを作成します。 ソースファイルと同じフォルダに入れてください。

3.makefile の作成

makefileを次のように追記します。

makefile
# UserChange

TARGETNAME=Win32Project1
TARGETNAME_C=test
TARGETNAME_R=test
OUTDIR=.\Release
MANIFEST=manifest.xml

LINK32=link.exe
MT=mt.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"

# manifest tool

MT_FLAGS=\
    -nologo\
    -outputresource:"$(OUTDIR)\$(TARGETNAME).exe"\
    -manifest ".\$(MANIFEST)"

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

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


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

MANIFEST=manifest.xml
は、追加のマニフェストファイルのファイル名です。環境に合わせて変更してください。

MT=mt.exe
は、Visual C++の場合、変更しないでください。

MT_FLAGS=
は、マニフェストツールのオプションです。

4.ビルド・実行

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