Doxygenを.batで実行

概要:バッチファイルでDoxygenを実行する。

警告

Doxygen 1.8.8にて、DOXYFILE_ENCODINGの値を環境変数にするとDoxygen実行時にエラー
[例:DOXYFILE_ENCODING=$(DOXYFILE_DOXYFILE_ENCODING)]
Error: unsupported character conversion: ‘$(DOXYFILE_DOXYFILE_ENCODING)’->’UTF-8’

暫定で、Doxyfileに固定で設定する。
[例:DOXYFILE_ENCODING=UTF-8]

バッチファイルの構成

概要:バッチファイルの構成
ファイル:doxygenbat20141012.zip
C:\doxygen>tree /f
C:.
├─bin
│  │  applyDoxyfile.wsf
│  │  createDoxyfile.bat
│  │  Doxyfile-base-basic.bat
│  │  updateDoxyfile.bat
│  │
│  ├─doxygen-1.8.7.windows.x64.bin
│  │      Doxyfile-base
│  │      Doxyfile-base-default.bat
│  │      Doxyfile-default
│  │      Doxyfile-default-strip
│  │      doxygen.exe
│  │      doxyindexer.exe
│  │      doxysearch.cgi
│  │
│  └─doxygen-1.8.8.windows.x64.bin
│          Doxyfile-base
│          Doxyfile-base-default.bat
│          Doxyfile-default
│          Doxyfile-default-strip
│          doxygen.exe
│          doxyindexer.exe
│          doxysearch.cgi
│
├─builds
│      AStyle.bat
│      sample.bat
│
├─docs
│  └─AStyle
│      └─2.04
│          │  doxygen_err.log
│          │  doxygen_out.log
│          │
│          └─html
│                  index.chm
│                  index.hhc
│                  index.hhk
│                  index.hhp
│                  index.html
│
└─src
    └─AStyle
        └─2.04
                astyle_main.cpp
                astyle_main.h

C:\doxygen>
構成
ファイル名 概要
bin/applyDoxyfile.wsf Doxyfile-base ファイルに環境変数を適用させたファイルを生成するツール
bin/createDoxyfile.bat Doxyfile-default ファイルと Doxyfile-default-strip ファイルを生成するツール
bin/Doxyfile-base-basic.bat DOXYFILE_DOT_PATH とかの共通設定
bin/updateDoxyfile.bat
Doxyfile-default ファイルと Doxyfile-default-strip ファイルを生成し、
Doxyfile-base ファイルと Doxyfile-base-default.bat ファイルをアップデートするツール
bin/doxygen-1.8.8.windows.x64.bin/Doxyfile-base 設定値の一部を環境変数へ
bin/doxygen-1.8.8.windows.x64.bin/Doxyfile-base-default.bat Doxyfile-baseで使用している環境変数をデフォルト値へ設定
bin/doxygen-1.8.8.windows.x64.bin/Doxyfile-default デフォルトのDoxyfile
bin/doxygen-1.8.8.windows.x64.bin/Doxyfile-default-strip デフォルトのDoxyfileからコメントを削除
bin/doxygen-1.8.8.windows.x64.bin/doxygen.exe doxygen本体
builds/*.bat プロジェクトごとのバッチファイル
docs/* ドキュメント(成果物)
src/* ソース

builds/AStyle.bat (プロジェクトごとのバッチファイル)

概要:プロジェクトごとのバッチファイルのサンプル
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
@echo off
setlocal

set DOXYGEN_HOME=..\bin\doxygen-1.8.8.windows.x64.bin
call "%DOXYGEN_HOME%\Doxyfile-base-default.bat"

call "..\bin\Doxyfile-base-basic.bat"
rem set DOXYFILE_DOXYFILE_ENCODING=UTF-8
echo %~n0
set DOXYFILE_PROJECT_NAME=%~n0
set DOXYFILE_PROJECT_NUMBER=2.04
set DOXYFILE_OUTPUT_DIRECTORY=..\docs\%DOXYFILE_PROJECT_NAME%\%DOXYFILE_PROJECT_NUMBER%
set DOXYFILE_BUILTIN_STL_SUPPORT=YES
set DOXYFILE_EXTRACT_ALL=YES
set DOXYFILE_EXTRACT_PRIVATE=YES
set DOXYFILE_EXTRACT_STATIC=YES
set DOXYFILE_INPUT=..\src\%DOXYFILE_PROJECT_NAME%\%DOXYFILE_PROJECT_NUMBER%
set DOXYFILE_INPUT_ENCODING=UTF-8
rem filter
rem set DOXYFILE_INPUT_FILTER=nkf -w
rem set DOXYFILE_FILTER_PATTERNS=
rem set DOXYFILE_FILTER_SOURCE_FILES=YES
rem set DOXYFILE_FILTER_SOURCE_PATTERNS=
rem source
set DOXYFILE_SOURCE_BROWSER=YES
set DOXYFILE_VERBATIM_HEADERS=YES
rem TIMESTAMP
set DOXYFILE_HTML_TIMESTAMP=NO
rem dot option
set DOXYFILE_INCLUDE_GRAPH=YES
set DOXYFILE_INCLUDED_BY_GRAPH=YES
set DOXYFILE_CALL_GRAPH=NO
set DOXYFILE_CALLER_GRAPH=NO
rem HTMLHELP
rem set DOXYFILE_GENERATE_HTMLHELP=YES
rem rem set DOXYFILE_CHM_FILE=..\htmlhelp\%DOXYFILE_PROJECT_NAME%.chm
rem rem set DOXYFILE_HHC_LOCATION=C:\Program Files (x86)\HTML Help Workshop\hhc.exe
rem set DOXYFILE_CHM_INDEX_ENCODING=cp932
rem rem set DOXYFILE_DOXYFILE_ENCODING=cp932
rem set DOXYFILE_SEARCHENGINE=NO


if exist %DOXYFILE_OUTPUT_DIRECTORY% (
    echo %DOXYFILE_OUTPUT_DIRECTORY% は既に存在します。
    goto end
)
mkdir %DOXYFILE_OUTPUT_DIRECTORY%

call cscript //NOLOGO "..\bin\applyDoxyfile.wsf" "%DOXYGEN_HOME%\Doxyfile-base" > "%DOXYFILE_OUTPUT_DIRECTORY%\doxyfile"

call "%DOXYGEN_HOME%\doxygen" "%DOXYGEN_HOME%\Doxyfile-base" 1> "%DOXYFILE_OUTPUT_DIRECTORY%\doxygen_out.log" 2> "%DOXYFILE_OUTPUT_DIRECTORY%\doxygen_err.log"

:end
endlocal
pause

bin/applyDoxyfile.wsf

概要:Doxyfile-base ファイルに環境変数を適用させたファイルを生成するツール
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?xml version="1.0" encoding="Shift_JIS" standalone="yes" ?>
<package>
<job id="apply">
<?job error="true" debug="true" ?>
<object id="objShell" progid="WScript.Shell" />
<object id="objFs"  progid="Scripting.FileSystemObject" reference="yes" />
<script language="JScript">
<![CDATA[
    try {
        var objTextStream = objFs.OpenTextFile(WScript.Arguments(0), ForReading, false, TristateUseDefault);
        try {
            while (objTextStream.AtEndOfLine == false) {
                strText = objTextStream.ReadLine();
                var objMatch = strText.match(/\$\(.*?\)/g);
                if (objMatch) {
                    for (var i = 0; i < objMatch.length; ++i) {
                        var strEnv = '%' + objMatch[i].slice(2, -1) + '%';
                        var strValue = objShell.ExpandEnvironmentStrings(strEnv);
                        if (strEnv !== strValue) {
                            //WScript.StdOut.Write(strValue + '\n');
                            strText = strText.replace(objMatch[i], strValue);
                        } else {
                            //WScript.StdOut.Write('\n');
                            strText = strText.replace(objMatch[i], '');
                        }
                    }
                }
                WScript.echo(strText);
            }
        } finally {
            objTextStream.Close();
        }
    } catch(e) {
        objShell.Popup(e.message, 0, WScript.ScriptName, 64);
    }
]]>
</script>
</job>
</package>

bin/createDoxyfile.bat

概要:Doxyfile-default ファイルと Doxyfile-default-strip ファイルを生成するツール
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
@echo off
setlocal

rem 実行されているファイルが置かれているカレントディレクトリー
set BAT_HOME=%~dp0
set DOXY_VER_NEW=%1
rem 引数にバージョンがあるか?
if "%DOXY_VER_NEW%"=="" (
    set /P DOXY_VER_NEW= [%~n0] Doxygenのバージョンを入力して下さい。:
) else (
    if /I "%1"=="help" (
        echo Doxyfile-default ファイルと Doxyfile-default-strip ファイルを生成するツール
        echo 例:
        echo createDoxyfile.bat 1.8.7
        goto end
    )
)
set DOXY_DIR_NEW=doxygen-%DOXY_VER_NEW%.windows.x64.bin
if not exist %DOXY_DIR_NEW%\nul (
    echo [%~n0] %DOXY_DIR_NEW%
    echo [%~n0] ディレクトリーが見つかりません。
    set /P DOXY_DIR_NEW= [%~n0] Doxygenのディレクトリーを入力して下さい。:
)
if not exist %DOXY_DIR_NEW%\nul (
    echo [%~n0] %DOXY_DIR_NEW%
    echo [%~n0] ディレクトリーが見つかりません。
    if not "%DOXY_DIR_NEW: =%" == "%DOXY_DIR_NEW%" (
        echo [%~n0] ^(ディレクトリー名に空白を含むことはできません^)
    )
    goto end
) else (
    if exist %DOXY_DIR_NEW%\Doxyfile-default (
        echo [%~n0] %DOXY_DIR_NEW%\Doxyfile-default
        goto err_exist_file
    )
    if exist %DOXY_DIR_NEW%\Doxyfile-default-strip (
        echo [%~n0] %DOXY_DIR_NEW%\Doxyfile-default-strip
        goto err_exist_file
    )
    if not exist %DOXY_DIR_NEW%\doxygen.exe (
        echo [%~n0] %DOXY_DIR_NEW%\doxygen.exe
        goto err_not_exist_file
    )
    echo [%~n0] Doxyfile-default^(デフォルトのDoxyfile^)の生成
    %DOXY_DIR_NEW%\doxygen.exe -g %DOXY_DIR_NEW%\Doxyfile-default
    echo [%~n0] Doxyfile-default-strip^(Doxyfile-defaultからコメント行と空行をすべて削除したもの^)の生成
    (for /f "delims=, eol=#" %%A in (%DOXY_DIR_NEW%\Doxyfile-default) do echo %%A)>%DOXY_DIR_NEW%\Doxyfile-default-strip
    echo [%~n0] ### Create successful.
    echo [%~n0] %DOXY_DIR_NEW% 配下に以下のファイルを生成しました。
    echo [%~n0] Doxyfile-default
    echo [%~n0] Doxyfile-default-strip
    goto end
)
:err_not_exist_file
    echo [%~n0] ファイルが存在しません。
    goto end
:err_exist_file
    echo [%~n0] 既にファイルが存在します。
    goto end
:end
endlocal
pause

bin/updateDoxyfile.bat

概要:
Doxyfile-default ファイルと Doxyfile-default-strip ファイルを生成し、
Doxyfile-base ファイルと Doxyfile-base-default.bat ファイルをアップデートするツール
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
@echo off
setlocal

rem old
set DOXY_VER_OLD=%1
if "%DOXY_VER_OLD%"=="" (
    set /P DOXY_VER_OLD= [%~n0] "古い" Doxygenのバージョンを入力して下さい。:
) else (
    if /I "%1"=="help" (
        echo Doxyfile-default ファイルと Doxyfile-default-strip ファイルを生成し、
        echo Doxyfile-base ファイルと Doxyfile-base-default.bat ファイルをアップデートするツール
        echo 例:
        echo createDoxyfile.bat 1.8.6 1.8.7
        goto end
    )
)
set DOXY_DIR_OLD=doxygen-%DOXY_VER_OLD%.windows.x64.bin
if not exist %DOXY_DIR_OLD% (
    echo [%~n0] %DOXY_DIR_OLD%
    echo [%~n0] ディレクトリーが見つかりません。
    set /P DOXY_DIR= [%~n0] "古い" Doxygenのディレクトリーを入力して下さい。:
)
if not exist %DOXY_DIR_OLD% (
    echo [%~n0] %DOXY_DIR_OLD%
    echo [%~n0] ディレクトリーが見つかりません。
    if not "%DOXY_DIR_OLD: =%" == "%DOXY_DIR_OLD%" (
        echo [%~n0] ^(ディレクトリー名に空白を含むことはできません^)
    )
    goto end
)
if not exist %DOXY_DIR_OLD%\Doxyfile-default (
    echo [%~n0] %DOXY_DIR_OLD%\Doxyfile-default
    goto err_not_exist_file
)
if not exist %DOXY_DIR_OLD%\Doxyfile-default-strip (
    echo [%~n0] %DOXY_DIR_OLD%\Doxyfile-default-strip
    goto err_not_exist_file
)
rem new
set DOXY_VER_NEW=%2
if "%DOXY_VER_NEW%"=="" ( 
    set /P DOXY_VER_NEW= [%~n0] "新しい" Doxygenのバージョンを入力して下さい。:
)
set DOXY_DIR_NEW=doxygen-%DOXY_VER_NEW%.windows.x64.bin
if not exist %DOXY_DIR_NEW%\nul (
    echo [%~n0] %DOXY_DIR_NEW%
    echo [%~n0] ディレクトリーが見つかりません。
    set /P DOXY_DIR_NEW= [%~n0] "新しい" Doxygenのディレクトリーを入力して下さい。:
)
if not exist %DOXY_DIR_NEW%\nul (
    echo [%~n0] %DOXY_DIR_NEW%
    echo [%~n0] ディレクトリーが見つかりません。
    if not "%DOXY_DIR_NEW: =%" == "%DOXY_DIR_NEW%" (
        echo [%~n0] ^(ディレクトリー名に空白を含むことはできません^)
    )
    goto end
) else (
    if exist %DOXY_DIR_NEW%\Doxyfile-default (
        echo [%~n0] %DOXY_DIR_NEW%\Doxyfile-default
        goto err_exist_file
    )
    if exist %DOXY_DIR_NEW%\Doxyfile-default-strip (
        echo [%~n0] %DOXY_DIR_NEW%\Doxyfile-default-strip
        goto err_exist_file
    )
    if not exist %DOXY_DIR_NEW%\doxygen.exe (
        echo [%~n0] %DOXY_DIR_NEW%\doxygen.exe
        goto err_not_exist_file
    )
    echo [%~n0] Doxyfile-default^(デフォルトのDoxyfile^)の生成
    %DOXY_DIR_NEW%\doxygen.exe -g %DOXY_DIR_NEW%\Doxyfile-default
    echo [%~n0] Doxyfile-default-strip^(Doxyfile-defaultからコメント行と空行をすべて削除したもの^)の生成
    (for /f "delims=, eol=#" %%A in (%DOXY_DIR_NEW%\Doxyfile-default) do echo %%A)>%DOXY_DIR_NEW%\Doxyfile-default-strip
    echo [%~n0] Doxyfile-baseをコピーしてアップデート
    copy %DOXY_DIR_OLD%\Doxyfile-base %DOXY_DIR_NEW%\Doxyfile-base-base
    %DOXY_DIR_NEW%\doxygen.exe -u %DOXY_DIR_NEW%\Doxyfile-base-base
    (for /f "delims=, eol=#" %%A in (%DOXY_DIR_NEW%\Doxyfile-base-base) do echo %%A)>%DOXY_DIR_NEW%\Doxyfile-base
    del %DOXY_DIR_NEW%\Doxyfile-base-base
    echo [%~n0] Doxyfile-base-default.batのコピー
    copy %DOXY_DIR_OLD%\Doxyfile-base-default.bat %DOXY_DIR_NEW%\Doxyfile-base-default.bat
    echo [%~n0] ### Update successful.
    echo [%~n0] %DOXY_DIR_NEW% 配下に以下のファイルを生成しました。
    echo [%~n0] Doxyfile-default
    echo [%~n0] Doxyfile-default-strip
    echo [%~n0] Doxyfile-base
    echo [%~n0] Doxyfile-base-default.bat
    echo.
    echo [%~n0] Doxyfile-base と Doxyfile-base-default.bat を確認して下さい。
    goto end
)
:err_not_exist_file
    echo [%~n0] ファイルが存在しません。
    goto end
:err_exist_file
    echo [%~n0] 既にファイルが存在します。
    goto end
:end
endlocal
pause

bin/Doxyfile-base-basic.bat

概要:DOXYFILE_DOT_PATH とかの共通設定
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
@echo off

rem # Doxyfile 1.8.7 default
rem OUTPUT_LANGUAGE        = English
rem RECURSIVE              = NO
rem HHC_LOCATION           =
rem GENERATE_LATEX         = YES
rem HAVE_DOT               = NO
rem DOT_MULTI_TARGETS      = NO
rem DOT_PATH               =
set DOXYFILE_OUTPUT_LANGUAGE=Japanese
set DOXYFILE_RECURSIVE=YES
set DOXYFILE_HHC_LOCATION=C:\Program Files (x86)\HTML Help Workshop\hhc.exe
set DOXYFILE_GENERATE_LATEX=NO
set DOXYFILE_HAVE_DOT=YES
set DOXYFILE_DOT_PATH=C:\Program Files (x86)\Graphviz2.38\bin
set DOXYFILE_DOT_MULTI_TARGETS=YES

設定(Doxyfile 1.8.8)

以下、変更部分を抜粋

Doxyfile-1.8.8-basic
タグ 初期値 設定値 特性 補足
DOXYFILE_ENCODING UTF-8 $(DOXYFILE_DOXYFILE_ENCODING)    
PROJECT_NAME “My Project” $(DOXYFILE_PROJECT_NAME)    
PROJECT_NUMBER   $(DOXYFILE_PROJECT_NUMBER)    
PROJECT_BRIEF   $(DOXYFILE_PROJECT_BRIEF)    
PROJECT_LOGO   $(DOXYFILE_PROJECT_LOGO)    
OUTPUT_DIRECTORY   $(DOXYFILE_OUTPUT_DIRECTORY)    
CREATE_SUBDIRS NO $(DOXYFILE_CREATE_SUBDIRS)    
OUTPUT_LANGUAGE English Japanese    
STRIP_FROM_PATH   $(DOXYFILE_INPUT)    
STRIP_FROM_INC_PATH   $(DOXYFILE_INPUT)    
OPTIMIZE_OUTPUT_FOR_C NO $(DOXYFILE_OPTIMIZE_OUTPUT_FOR_C)    
OPTIMIZE_OUTPUT_JAVA NO $(DOXYFILE_OPTIMIZE_OUTPUT_JAVA)    
OPTIMIZE_FOR_FORTRAN NO $(DOXYFILE_OPTIMIZE_FOR_FORTRAN)    
OPTIMIZE_OUTPUT_VHDL NO $(DOXYFILE_OPTIMIZE_OUTPUT_VHDL)    
EXTENSION_MAPPING   $(DOXYFILE_EXTENSION_MAPPING)    
BUILTIN_STL_SUPPORT NO $(DOXYFILE_BUILTIN_STL_SUPPORT)    
EXTRACT_ALL NO $(DOXYFILE_EXTRACT_ALL)    
EXTRACT_PRIVATE NO $(DOXYFILE_EXTRACT_PRIVATE)    
EXTRACT_STATIC NO $(DOXYFILE_EXTRACT_STATIC)    
INTERNAL_DOCS NO $(DOXYFILE_INTERNAL_DOCS)    
ENABLED_SECTIONS   $(DOXYFILE_ENABLED_SECTIONS)    
INPUT   $(DOXYFILE_INPUT)    
INPUT_ENCODING UTF-8 $(DOXYFILE_INPUT_ENCODING)    
FILE_PATTERNS   $(DOXYFILE_FILE_PATTERNS)    
RECURSIVE NO YES    
EXCLUDE   $(DOXYFILE_EXCLUDE)    
EXCLUDE_SYMLINKS NO $(DOXYFILE_EXCLUDE_SYMLINKS)    
EXCLUDE_PATTERNS   $(DOXYFILE_EXCLUDE_PATTERNS)    
EXCLUDE_SYMBOLS   $(DOXYFILE_EXCLUDE_SYMBOLS)    
INPUT_FILTER   $(DOXYFILE_INPUT_FILTER)    
FILTER_PATTERNS   $(DOXYFILE_FILTER_PATTERNS)    
FILTER_SOURCE_FILES NO $(DOXYFILE_FILTER_SOURCE_FILES)    
FILTER_SOURCE_PATTERNS   $(DOXYFILE_FILTER_SOURCE_PATTERNS)    
SOURCE_BROWSER NO $(DOXYFILE_SOURCE_BROWSER)    
INLINE_SOURCES NO $(DOXYFILE_INLINE_SOURCES)    
VERBATIM_HEADERS YES $(DOXYFILE_VERBATIM_HEADERS)    
HTML_TIMESTAMP YES $(DOXYFILE_HTML_TIMESTAMP)    
GENERATE_HTMLHELP NO $(DOXYFILE_GENERATE_HTMLHELP)    
CHM_FILE   $(DOXYFILE_CHM_FILE)    
HHC_LOCATION   "C:\Program Files (x86)\HTML Help Workshop\hhc.exe"    
CHM_INDEX_ENCODING   $(DOXYFILE_CHM_INDEX_ENCODING)    
GENERATE_TREEVIEW NO $(DOXYFILE_GENERATE_TREEVIEW)    
GENERATE_LATEX YES NO    
MACRO_EXPANSION NO $(DOXYFILE_MACRO_EXPANSION)    
EXPAND_ONLY_PREDEF NO $(DOXYFILE_EXPAND_ONLY_PREDEF)    
PREDEFINED   $(DOXYFILE_PREDEFINED)    
EXPAND_AS_DEFINED   $(DOXYFILE_EXPAND_AS_DEFINED)    
HAVE_DOT NO YES    
INCLUDE_GRAPH YES $(DOXYFILE_INCLUDE_GRAPH)    
INCLUDED_BY_GRAPH YES $(DOXYFILE_INCLUDED_BY_GRAPH)    
CALL_GRAPH NO $(DOXYFILE_CALL_GRAPH)    
CALLER_GRAPH NO $(DOXYFILE_CALLER_GRAPH)    
DOT_PATH   "C:\Program Files (x86)\Graphviz2.38\bin"    
DOT_MULTI_TARGETS NO YES