【问题标题】:Is it possible to wrap a Doxygen filter command in quotes?是否可以将 Doxygen 过滤器命令用引号括起来?
【发布时间】:2018-01-23 04:21:40
【问题描述】:

我正在尝试编写一个 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

【问题讨论】:

标签: cmd doxygen popen


【解决方案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

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

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

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

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

    【讨论】:

    • 不幸的是,单引号破坏了 Doxygen 解析器。它不会抓住整个命令。它应该取消引用完整的命令,但似乎做得更多。
    • 你试过这个"scripts/runpython scripts/doxygen-glslfilter.py""scripts/runpython" "scripts/doxygen-glslfilter.py"
    • 赤裸裸的“scripts/runpython ...”导致原始帖子中的错误,因为 cmd 似乎无法解析 / 除非被引用。
    • 你能把/换成\
    • 这样的:scripts\runpython scripts\doxygen-glslfilter.py
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 2018-02-26
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    相关资源
    最近更新 更多