是否可以在引号中包含Doxygen过滤器命令?

时间:2018-01-23 04:21:40

标签: cmd doxygen popen

我正在尝试编写一个Doxygen文件过滤器,它位于Windows和Linux上的Doxyfile工作的子目录中。

Doxyfile
/scripts
    myfilter

我似乎无法在Windows上使用正斜杠指定路径,除非它被引用:

"scripts/myfilter"

但是,尝试在Doxyfile中引用该命令不起作用。

FILTER_PATTERNS        = *.glsl=""scripts/runpython" scripts/doxygen-glslfilter.py"

在Windows上,您会收到一个错误,表示引号不存在。

  

'scripts'不被识别为内部或外部命令,可操作程序或批处理文件。

Doxygen使用popen()来运行这些命令,并将删除命令周围的包装引号,但它似乎不会删除所有引号。

popen()电话:

https://github.com/doxygen/doxygen/blob/master/src/definition.cpp#L745

过滤器名称报价条:

https://github.com/doxygen/doxygen/blob/master/src/util.cpp#L2458

然而,结果与没有引号一样。

更新

我能够在Doxygen中获取命令记录,并且看起来额外的引号正以奇怪的方式被剥离。您可以看到命令前面是否有空格。

Executing popen(` scripts/runpython scripts/doxygen-glslfilter.py "C:/dev/g3d/G3D10/data-files/shader/AlphaFilter.glsl"`)

更新

我提交了错误报告/功能请求,但我怀疑它会被阅读。

Doxygen Bug Report

2 个答案:

答案 0 :(得分:1)

该问题已报告给doxygen项目,他们提供了一个解决方案,其中任何' /'在命令中被' \'取代在Windows上。

https://bugzilla.gnome.org/show_bug.cgi?id=792846

这样做是为了解决类似的问题: What is the QHG_LOCATION path relative to for doxygen?

github上项目的拉取请求:https://github.com/doxygen/doxygen/pull/703

答案 1 :(得分:0)

在单个字符串中的双引号内使用双引号时,它会将第一个双引号视为起始字符串,将下一个双引号视为字符串的结尾。 所以在你的例子中:

""scripts/runpython" scripts/doxygen-glslfilter.py"

前2个引号被视为打开和关闭,然后它将scripts/runpython视为下一个命令等。

我没有相同的工具,但这两个例子可能会解决您的问题。

此示例将每个集合用双引号括起来,整个集合用单引号括起来。

FILTER_PATTERNS = *.glsl='"scripts/runpython" "scripts/doxygen-glslfilter.py"'

此示例将第一个集合用双引号括起来,整个集合用单引号括起来。

FILTER_PATTERNS = *.glsl='"scripts/runpython" scripts/doxygen-glslfilter.py'

注意!! 我无法测试这个,因为我没有和你一样的环境。因此,我不确定第二个选项是否有效,因为它可能还需要双引号scripts/doxygen-glslfilter.py,无论如何我都会将其添加到答案中。