2010-04-23 46 views
1

我想使用doxygen为我写的一些matlab类生成文档。我使用doxygen-matlab软件包,其中包括一个perl脚本,用于将matlab .m文件拼凑成C++风格的注释文件,以便doxygen可以读取它们。输入过滤器在Windows XP上使用doxygen 1.6.3的问题

在我的Doxyfile,我已经(按说明书)设置

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

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

IE浏览器,如果我将.pl与记事本关联起来,脚本会被记事本打开一次,用于doxygen试图解析的每个输入文件。如果我联想特等与perl.exe所在,脚本运行,并抛出无参数错误

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

的doxygen文档说

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

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

回答

1

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

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

现在回到Doxygen。我尝试了你的建议,法布里斯,没有任何运气。我读了doxygen帮助,发现INPUT_FILTER变量只有在FILTER_PATTERNS为空时才被读取和使用。因此,我现在使用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文件的文件夹。

+0

这个固定我的问题;它可以很好地解决问题,因为我不太可能混合使用c和m文件。 另外,除了更好的食物,显然还有法国的优势。当我用“程序文件”替换“程序”时,doxygen窒息。但使用dos风格的“progra〜1”效果很好。 如果有人发现使用FILTER_PATTERNS工作的方法,我会等待一天以接受此答案,但在几乎所有情况下,这都会足够好。 – Marc 2010-05-03 17:03:51

+0

对于我来说,程序文件中的空间还有INPUT_FILTER =“C:\ Progra〜1 \ MATLAB \ sys \ perl \ win32 \ bin \ perl.exe等\ m2cpp.pl” – 2016-09-02 10:14:34

2

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

  1. 设置下列变量中的Doxyfile: INPUT_FILTER = perl的m2cpp.pl FILE_PATTERNS = * M

  2. 如果不工作,你应该尝试安装的activeperl:与此版本的perl,一切工作正常。

0

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

要解决这个问题,你应该改变为.pl文件的关联:在Windows命令提示符(“cmd”),只需键入德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

你能告诉我,如果这能解决问题?

+0

我仍然遇到同样的错误之前;尝试使用C:\ Program Files \ ....和C:\ Progra〜1 \ .... 我会在周一更多地使用它,看看我是否可以使它工作 – Marc 2010-05-08 02:33:26

0

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

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

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

尝试:

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

1

编写一个简单的批处理文件,例如(我所有的实验用doxygen的版本1.8.6完成) mfilter.bat,这需要通过命令行一个参数:在的Doxyfile

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

更改设置:

FILTER_PATTERNS = *.m=mfile.bat

这为我做(在Windows平台上)