1

我正在尝试使用 doxygen 为我编写的一些 matlab 类生成文档。我正在使用doxygen-matlab包,其中包含一个 perl 脚本,用于将 matlab .m 文件合并到 c++ 样式的注释文件中,以便 doxygen 可以读取它们。

在我的 doxyfile 中,我已经设置(根据说明)

FILTER_PATTERNS        = *m=C:/doxygenMatlab/m2cpp.pl

但是,当代码运行时,而不是在输入文件上运行脚本,它似乎只是使用 .pl 的默认窗口设置打开脚本。

IE,如果我将 .pl 与记事本相关联,则记事本会为 doxygen 尝试解析的每个输入文件打开一次脚本。如果我将 .pl 与 perl.exe 相关联,则脚本运行并抛出无参数错误

参数必须在 C:\doxygenMatlab\m2cpp.pl 第 4 行包含文件名 -1。

doxygen 文档说

Doxygen will invoke the filter program by executing (via popen()) the command <filter> <input-file>

所以我想知道 popen() 和 windows 是否有一些我可以修复的问题。

4

5 回答 5

2

你能试试我在 Matlab File Exchange 上发布的关于 doxygen 包的解决方法吗?

  1. 在 Doxyfile 中设置以下变量: INPUT_FILTER=perl m2cpp.pl FILE_PATTERNS=*.m

  2. 如果它不起作用,您应该尝试安装 ActivePerl:使用此版本的 perl,一切正常。

于 2010-05-02T20:09:40.317 回答
1

我尝试使用 Windows 命令提示符(“cmd”)重现错误并注意到以下内容:

  • 如果你调用“perl m2cpp.pl”你会得到错误-1,因为你没有指定一个m文件被翻译成cpp文件。
  • 如果您调用“perl m2cpp.pl mfile”并且 mfile 的路径包含空格,则会收到错误 1。
  • 将 mfile 移动到不包含空格的位置后,我得到了所需的输出。

现在回到 Doxygen。我尝试了你的建议,Fabrice,没有任何运气。我阅读了 doxygen 帮助,发现只有在 FILTER_PATTERNS 为空时才读取和使用 INPUT_FILTER 变量。

因此,我现在使用 INPUT_FILTER = "C:\Programme\MATLAB\R2009a\sys\perl\win32\bin\perl U:\doxygen_matlab\m2cpp.pl" 和一个空的 FILTER_PATTERNS 变量。使用此配置,您甚至可以将 PERL_PATH 变量留空。此外,包含空格的文件名似乎没有问题。

不幸的是,所有文件都使用上述配置进行解析,而不仅仅是 m 文件。但是,将 FILTER_PATTERNS 设置为 *.m=C:\Programme\MATLAB\R2009a\sys\perl\win32\bin\perl U:\doxygen_matlab\m2cpp.pl 不起作用,因为 doxygen 会自动添加过滤后的 mfile 的名称并将命令解释为 perl "m2cpp.pl mfile"。当然,文件“m2cpp.pl mfile”是不存在的,因为这是两个文件。

也许您可以找到解决此问题的方法。同时,我建议采用上述解决方法,并将 C 文件远离包含 m 文件的文件夹。

于 2010-05-03T10:52:22.780 回答
1

编写一个简单的批处理文件,例如mfilter.bat,它从命令行获取一个参数:

C:\Programme\MATLAB\R2009a\sys\perl\win32\bin\perl U:\doxygen_matlab\m2cpp.pl %1

更改 Doxyfile 中的设置:

FILTER_PATTERNS = *.m=mfile.bat

这是为我做的(在 Windows 平台上)

于 2015-08-26T16:29:41.040 回答
0

我想我解决了这个问题:它来自 .pl 和要执行的程序之间的不良关联(可能是由于 Matlab 附带的 perl 安装错误?)。

要更正此问题,您应该更改 .pl 文件的关联:在 Windows 命令提示符 ("cmd") 中,只需键入 de 2 以下行:

assoc .pl=PerlScript

ftype PerlScript=C:\Program Files\MATLAB\R20xx\sys\perl\win32\bin\perl.exe %1 %*

(旧安装忘记了最后的 %*,参数没有传递给 m2cpp.pl 脚本)。

然后用通常的方式设置 FILTER_PATTERNS 一切都应该没问题,例如FILTER_PATTERN=*m=C:\DoxygenMatlbab\m2cpp.pl

你能告诉我这是否解决了你的问题吗?

于 2010-05-06T15:30:26.813 回答
0

根据Doxygen 论坛,使用 INPUT_FILTER 和 FILTER_PATTERNS 的行为有所不同。

我发现如果我做一些额外的(转义)引用,我可以让 FILTER_PATTERNS 工作。例如,而不是:

FILTER_PATTERNS        = "*.m=sed -e 's|%%|//!|'"

尝试:

FILTER_PATTERNS        = "*.m=\"sed -e 's|%%|//!|'\""

(我所有的实验都是用 doxygen 1.8.6 版完成的)

于 2014-04-18T23:38:11.420 回答