在Windows XP上使用doxygen 1.6.3的输入过滤器问题

时间:2010-04-23 20:08:18

标签: windows matlab doxygen popen

我正在尝试使用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是否存在一些我可以解决的问题。

5 个答案:

答案 0 :(得分:2)

您可以尝试我在Matlab文件交换中发布的关于doxygen包的变通方法吗?

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

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

答案 1 :(得分:1)

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

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

现在回到Doxygen。我尝试了你的建议,法布里斯,没有任何运气。我读了doxygen帮助,发现如果FILTER_PATTERNS为空,只读取和使用INPUT_FILTER变量。

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

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

也许你可以找到解决这个问题的方法。与此同时,我建议上面的解决方法,并保持您的C文件远离包含m文件的文件夹。

答案 2 :(得分: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平台上)

答案 3 :(得分: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

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

答案 4 :(得分:0)

根据Doxygen forums,使用INPUT_FILTER和FILTER_PATTERNS之间的行为有所不同。

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

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

尝试:

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

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