指定目标环境和编译器行为
在进行验证之前,需指定您的源代码语言(C 或 C++)、目标处理器以及用于编译代码的编译器。在某些情况下,为了模拟编译器的行为,您可能还需要指定其他选项。
根据您的设定,验证过程会确定基本类型的大小,将某些宏视为已定义,并解释编译器对标准的特定扩展。如果选项与您的运行环境不一致,可能会遇到以下情况:
编译错误
验证结果可能不适用于您的目标。
如果您使用 gmake 等编译命令来编译代码,且该编译命令满足某些限制,则可以在执行命令后从编译命令中提取相关选项。否则,请显式指定选项。

从编译命令中提取选项
如果您使用编译自动化脚本编译源代码,则可以通过脚本来设置 Polyspace® 工程。与编译器相关的选项会在该工程中指定。
在 Polyspace 桌面产品中,有关如何从以下位置跟踪编译命令的信息:
Polyspace 用户界面,请参阅 在 Polyspace 用户界面中添加要分析的源文件。
DOS 或 UNIX® 命令行,请参阅
polyspace-configure。MATLAB® 命令行,请参阅
polyspaceConfigure。
在 Polyspace 服务器产品中,有关如何跟踪编译命令的信息,请参阅 从编译命令 (makefile) 创建 Polyspace 分析配置。
对于 Polyspace 工程创建,您的编译自动化脚本 (makefile) 必须满足一定的要求。请参阅从编译系统创建工程的要求。
显式指定选项
如果您无法追踪编译命令,需要手动创建工程,则必须显式指定相关选项。
在 Polyspace 桌面产品的用户界面中,选择一个工程配置。在配置窗格中,选择目标和编译器。指定相关选项。
在 DOS 或 UNIX 命令行中,通过
polyspace-bug-finder、polyspace-code-prover(Polyspace Code Prover)、polyspace-bug-finder-server或polyspace-code-prover-server(Polyspace Code Prover) 命令指定相应的标志参数。在 MATLAB 命令行中,通过
polyspaceBugFinder、polyspaceCodeProver(Polyspace Code Prover)、polyspaceBugFinderServer或polyspaceCodeProverServer函数指定相应的参量。
按顺序指定选项。
必需选项:
源代码语言 (-lang):如果所有文件的扩展名均为.c或.cpp,则验证过程将根据扩展名确定源代码语言。否则,请显式指定该选项。编译器 (-compiler):选择用于编译源代码的编译器。如果找不到编译器,请使用与编译器最接近的选项。目标处理器类型 (-target):指定您计划在哪个目标处理器上执行您的代码。对于某些处理器,您可以更改默认设定。例如,对于处理器hc08,您可以将类型double和long double的大小从 32 位更改为 64 位。如果找不到目标处理器,可以创建自己的目标,并指定基本类型的大小、
char的默认符号以及目标机器的字节序。请参阅Generic target options。
语言特定选项:
C 标准版本 (-c-version):C 语言的默认标准取决于您的编译器设定。如果您未显式指定编译器,默认分析将使用 C99 标准。您可以指定更早的标准(如 C90)或更晚的标准(如 C11)。C++ 标准版本 (-cpp-version):默认的 C++ 语言标准取决于您的编译器设定。如果您未显式指定编译器,默认分析将使用 C++03 标准。您可以指定更高的标准,例如 C++11 或 C++14。
编译器特定选项:
这些选项是否可用取决于您对
编译器 (-compiler)的设定。例如,如果您选择了visual编译器,则可使用选项包对齐值 (-pack-alignment-value)。使用此选项,您可以模拟在 Visual Studio® 中使用的编译器选项/Zp。有关所有编译器特定选项的信息,请参阅 目标和编译器。
高级选项:
使用这些选项,您可以修改验证结果。例如,如果您使用选项
向下取整 (-div-round-down),则验证会认为负数除法或取模运算的商视为向下取整。仅当您在编译代码时使用了类似选项时,才应使用这些选项。有关所有高级选项的信息,请参阅目标和编译器。
编译器头文件:
如果指定了 diab、tasking 或 greenhills 编译器,则必须指定编译器头文件的路径。请参阅为 Polyspace 分析提供标准库头文件。
如果运行分析后仍然出现编译错误,您可能还需要指定其他选项:
定义宏:有时,编译错误发生是因为分析将宏视为未定义。显式定义这些宏。请参阅
预处理器定义 (-D)。指定包含文件:有时,由于编译器对标准库函数的定义与 Polyspace 不同,并且您未提供编译器包含文件,因此会发生编译错误。请显式指定编译器包含文件的路径。请参阅为 Polyspace 分析提供标准库头文件。
另请参阅
源代码语言 (-lang) | 编译器 (-compiler) | 目标处理器类型 (-target) | C 标准版本 (-c-version) | C++ 标准版本 (-cpp-version) | 预处理器定义 (-D)