squishidl

“squishidl”工具解析C++头文件并生成C++反射和自动化代码。它主要在Squish工具内部使用,尽管一些客户也发现它很有用。自从Squish 4以来,这个工具很少需要,因为可以自动检测属性和方法,即使是自定义AUT对象也不例外。

对于每个处理的C++头文件,都需要两个输出文件:一个.h文件和一个.cpp文件。为了生成这些文件,需要运行两次squishidl:第一次生成.h文件,第二次使用原始头文件和生成的头文件来生成.cpp文件。

“squishidl”工具有一个小的限制,偶尔会出现:工具无法包装具有私有赋值构造函数或私有复制构造函数的类型属性。这是因为Squish的绑定需要复制属性值,显然不可能对禁止赋值或复制的类型进行复制。

用法

squishidl <--decl|--impl> -i filename.h [其他选项]

尖括号内的项是必需的;|表示可选择的。因此,这里必须指定--decl选项或--impl选项。此外,还需要指定-i(输入)选项。

示例

要生成头文件,使用--decl(声明)选项运行squishidl,并使用-i选项指定要解析的C++头文件。例如

squishidl --decl -i myapp.h -o generated.h

这读取输入头文件myapp.h并输出生成的头文件,generated.h

要生成cpp文件,使用--impl(实现)选项运行squishidl,并使用-i选项指定使用-h选项生成的头文件,以及使用-i选项指定的C++头文件。例如

squishidl --impl -i myapp.h -h generated.h -o generated.cpp

这读取输入头文件myapp.h和生成的头文件generated.h,并输出生成的实现文件generated.cpp

选项

支持许多可选值,并且某些选项可以多次使用,如星号*所示

选项描述
-o 输出文件默认情况下,输出写入stdout流(如控制台)。使用此选项指定写入输出的文件。
--dump [转储文件]需要此选项来调试squishidl,所以通常不应使用它。它会在解析C++头文件并经过输出生成器处理后,输出squishidl的中间格式。默认情况下,输出发送到stdout流,但如果指定了文件名,则输出将写入该文件。
-D *在命令行上定义宏。这与使用命令行定义C++编译器的宏的方式相同。在编译输入文件时通过这种方式定义的任何宏都应传递给squishidl
-U *在命令行上取消定义宏。这与使用命令行取消定义C++编译器的宏的方式相同。在编译输入文件时通过这种方式取消定义的任何宏也应传递给squishidl
-I 包含路径*以与C++编译器在命令行上执行的方式添加包含搜索路径。应在编译输入文件时传递给C++编译器的相同包含路径传递给squishidl
-F 路径*在框架中添加包含搜索路径。与编译输入文件时传递给C++编译器的相同框架包含路径应传递给squishidl
--strict默认情况下,在解析C++头文件时,解析错误被视为警告。使用此选项可强制squishidl将解析错误视为致命错误。
--filter expr*指定全局函数、类、方法或模板实例化,对于这些实例,不应生成内省代码。《i》表达式必须是类型或函数的完全限定签名。

例如,要排除QListIterator类,请使用--filter QListIterator。要排除两个QList::erase方法,则必须使用两次选项,--filter "QList::iterator QList::erase(QList::iterator)"--filter "QList::iterator QList::erase(QList::iterator,QList::iterator)"。引号是必不可少的,因为它们可以考虑到返回类型和方法名称之间的空白。

--nocache默认情况下,squishidl会将其首次运行的数据以中间格式缓存,并在第二次运行时仅在缓存的时间戳更改时解析C++头文件。使用此选项可关闭squishidl的缓存。使用此选项将减慢squishidl的运行速度,通常不需要这么做。
--includePrefix 前缀指定用于生成#include语句的前缀。空的前缀相当于指定当前目录。

例如,如果输入文件包含包含#include <header>,并且指定了--includePrefix ../parallel/,则生成的结果是#include <../parallel/header>

--extraInclude 包含文件*指定应出现在生成的文件中的#include语句中的文件名。
--commandFile 文件名从指定的命令文件中读取选项。

命令文件

还可以从文件中读取命令行选项。命令文件是纯文本文件,包含单行或多行上的命令行参数。如果需要复杂的命令行,使用命令文件可能很方便——特别是如果需要反复使用相同的命令行时。不同的操作系统具有不同的命令行长度限制,因此,如果达到此限制,则使用命令文件可以绕过问题。

命令文件包含一或多个命令行选项的行,按与命令行中完全相同的方式编写——包括对任何空白的引号。忽略空白行和注释行(以#开头)。

以下是一个名为all_my_defines.cmdfile的命令文件示例

# all_my_defines.cmdfile
-D FOO=1
-D BAR=42

您可以使用以下方式使用命令文件与squishidl工具

squishidl --impl -i myapp.h -h generated.h -o generated.cpp --commandFile all_my_defines.cmdfile

©2024 The Qt Company Ltd. 文档贡献的版权属于各自的拥有者。
本提供的文档是根据自由软件基金会发布的GNU自由文档许可协议第1.3版许可的。
Qt及其各自的标志是芬兰乃至全球的Qt公司的商标。所有其他商标均为其各自的拥有者。