我正在尝试使用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是否存在一些我可以解决的问题。
答案 0 :(得分:2)
您可以尝试我在Matlab文件交换中发布的关于doxygen包的变通方法吗?
在Doxyfile中设置以下变量: INPUT_FILTER = perl m2cpp.pl FILE_PATTERNS = *。米
如果它不起作用,你应该尝试安装ActivePerl:使用这个版本的perl,一切正常。
答案 1 :(得分:1)
我尝试使用Windows命令提示符(“cmd”)重现错误,并注意到以下内容:
现在回到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完成的)