【问题标题】:How to generate CHM with Doxygen and HTML Help Compiler?如何使用 Doxygen 和 HTML Help Compiler 生成 CHM?
【发布时间】:2015-08-18 05:37:15
【问题描述】:

小故事:我可以使用 Doxygen 生成 CHM 文件。启动 CHM 文件,我观察到 Contents 和 Index 选项卡确实列出了页面、名称空间、类和这些类的成员。但是,单击这些目录和索引列表中的项目不会显示任何内容。

我在使用 64 位 Windows 7 Professional SP1 的计算机上。

我使用 Doxywizard 在我的代码上运行 Doxygen 版本 1.8.9.1。它正确地生成 HTML 输出;页面、命名空间、类和成员出现在文档中。

然后我还想将 HTML 转换为压缩的 HTML (CHM) 文件。

我从 Microsoft 网站 (https://msdn.microsoft.com/en-us/library/windows/desktop/ms669985(v=vs.85).aspx) 下载了 Microsoft HTML Help Workshop 1.31 版(即htmlhelp.exe 4.74.8703 版)。我运行了安装程序。随着安装程序的进行,出现了一条弹出消息:

这台计算机已经有更新版本的 HTML 帮助。

但是,安装成功完成。而且,hhc.exe 程序就在我告诉它安装的地方。

我现在指定这些相关的 Doxygen 设置:

  • 向导 --> 输出:
    • HTML 已检查
    • 已选择“准备压缩 HTML (.chm)”选项。
  • 专家 --> HTML:
    • GENERATE_HTMLHELP = 是
    • CHM_FILE = Foo.chm
    • HHC_LOCATION = C:\Program Files(x86)\Microsoft\HTML Help Workshop\hhc.exe

当我再次运行 Doxygen 时,它会报错:

error: failed to run html help compiler on index.hhp

Foo.chm 文件在预期的位置生成。但是,如上所述,它缺少很多内容。

我尝试在 Doxygen 生成的 HHP 文件上手动运行 hhc.exe。它不表示任何错误。

C:\Program Files (x86)\Microsoft\HTML Help Workshop>hhc c:\test\html\index.hhp
Microsoft HTML Help Compiler 4.74.8702

Compiling c:\test\html\Foo.chm

Compile time: 0 minutes, 3 seconds
292     Topics
3,855   Local links
83      Internet links
0       Graphics

Created c:\test\html\Foo.chm, 259,580 bytes
Compression decreased file by 1,077,915 bytes.

但是,结果是一样的:Foo.chm 文件缺少内容。

随后我发现我的计算机上安装了另一个 HTML Help Workshop。但是,hhc.exe 是完全相同的版本。所以,这不太可能是问题所在。

您能否建议我还可以尝试什么以使所有文档内容显示在 CHM 文件中?

【问题讨论】:

    标签: c++ doxygen chm doxygen-wizard html-help-workshop


    【解决方案1】:

    当我看到这个问题(html 存在并且 chm 有内容但该内容不可见)时,这是因为 windows 安全已“阻止”了 chm 文件。要查看这是否是您遇到的情况,请尝试以下操作:

    1. 在 Windows 资源管理器中,右键单击生成的 .chm 文件并选择属性。
    2. 在“常规”选项卡上,如果您看到“取消阻止”按钮,请单击它。
    3. 关闭对话框并打开 .chm 文件。

    (我没有遇到本地生成的 doxygen .chm 文件的这个问题,但我希望从你的描述中可以解决你的问题。)

    【讨论】:

    • 我没有看到要点击的“被阻止”按钮。但是,这让我想到了正确的轨道。我简化了上面的问题描述,说生成的Foo.chm 文件位于c: 驱动器上。但是,它实际上位于映射的网络驱动器上。当我将 CHM 文件复制到计算机上的物理驱动器时,会显示所有内容。问题解决了。谢谢。
    【解决方案2】:

    根本问题是 CHM 文件位于映射的网络驱动器上。

    当我将 CHM 文件复制到计算机上的物理驱动器时,所有内容都会显示。

    【讨论】:

      【解决方案3】:

      在您的 doxyfile 中,将 hhc.exe 的路径放在双引号中,因为它包含空格。

      或者更好的是,不要使用带空格的路径。

      【讨论】: