从编译系统创建 Polyspace 工程的要求
要从编译系统自动创建工程,您的编译命令或 makefile 必须满足一定的要求。
编译器要求
您的编译器必须在本地调用。
如果您使用了编译器缓存(如
ccache)或分布式编译系统(如distmake),软件将无法追踪您的编译过程。您必须停用它们。您的编译器必须执行一次干净的编译。
如果编译器只执行增量编译,请使用适当的选项来编译所有源文件。例如,如果您使用
gmake,请附加-B或-W选项以强制进行干净编译。有关 GNU®makefileNamemake允许的选项列表,请参阅 make 选项。您的编译器配置必须可供 Polyspace® 使用。目前支持的编译器包括以下几种:
Arm Keil。
ARM® v5 和 v6。
Clang。
Cosmic。
Wind River® Diab。
Green Hills®.
GNU C/C++。
IAR Embedded Workbench。
IAR 系统。
Intel® C++ Compiler Classic (icc/icl) 编译器。
Microsoft® Visual C++®.
MPLAB XC8 C。
请注意,编译必须使用
xc8-cc可执行文件。不支持旧版 MPLAB XC8 编译器(版本低于 v2.0)以及使用picc可执行文件的 MPLAB C18 编译器。NXP CodeWarrior®。
Renesas®.
Altium® Tasking。
Texas Instruments®.
tcc - Tiny C Compiler。
如果 Polyspace 无法访问您的编译器配置,请:
为您的编译器编写一个特定格式的编译器配置文件。有关详细信息,请参阅Create Polyspace Projects from Build Systems That Use Unsupported Compilers。
联系 MathWorks 技术支持。
如果您在 Cygwin™ 中编译代码,请使用 Cygwin 的 2.x 或 3.x 版本从编译系统(例如 Cygwin 版本 2.10 或 3.0)创建 Polyspace 工程。
使用 TASKING 编译器时,如果使用了扩展名为
.asfr的替代 sfr 文件,Polyspace 可能无法找到该文件。如果遇到错误,请使用强制包含文件 (-include)选项在预处理代码中显式#include您的.asfr文件。通常,您使用语句
#include __SFRFILE__(__CPU__)以及编译器选项--alternative-sfr-file来指定一个替代 sfr 文件。文件路径通常为。例如,如果 TASKING 编译器安装在Tasking_C166_INSTALL_DIR\include\sfr\regCPUNAME.asfrC:\Program Files\Tasking\C166-VX_v4.0r1\,并且您使用与 CPU 相关的标志-Cxc2287m_104f或--cpu=xc2287m_104f,则路径为C:\Program Files\Tasking\C166-VX_v4.0r1\include\sfr\regxc2287m.asfr。
编译命令要求
您的编译命令必须在无需任何用户交互的情况下运行完成。
在 Linux® 环境中,仅可使用 UNIX® shell (sh) 命令。如果您的编译使用了高级命令(例如仅由 bash、tcsh 或 zsh 支持的命令),Polyspace 无法跟踪您的编译。
在 Windows® 中,只能使用 DOS 命令。如果您的编译使用了高级命令(例如仅由 PowerShell 支持的命令或 Cygwin),Polyspace 将无法跟踪您的编译。要检查 Polyspace 是否支持您的编译命令,请在 Windows 的
cmd.exe中运行该命令。有关详细信息,请参阅Check If Polyspace Supports Build Scripts。您的编译命令不能包含使用通配符字符将多个源在同一行中进行编译的行,例如:
cl.exe *.c
如果您使用静态链接库,Polyspace 将无法跟踪您的编译。在 Linux 中,您可以安装完整的 Linux Standard Base (LSB) 包以启用动态链接。例如,在 Debian® 系统上,使用命令
apt-get install lsb安装 LSB。您的编译命令不得使用别名。
在 Linux 中,
alias命令用于为其他命令创建别名。如果您的编译命令使用了这些别名,Polyspace 将无法识别它们。您的编译过程不得使用
LD_PRELOAD机制。编译命令中不得包含短文件名或 8.3 文件名,例如以下路径中的
PROGRA~和C__~1:"command": "C:\\PROGRA~1\\mingw64\\bin\\C__~1.EXE
您的编译命令必须在当前机器上完全可执行,且不应需要其他用户的权限。
如果您的编译使用
sudo更改用户特权或使用ssh远程登录到另一台机器,则 Polyspace 无法跟踪您的编译。如果编译命令使用
>或|字符进行重定向,则重定向将在 Polyspace 跟踪命令后发生。因此,Polyspace 不处理重定向。例如,如果您的命令为
然后您输入command1 | command2
在跟踪编译时,Polyspace 仅跟踪第一个命令。polyspace-configure command1 | command2
在以下情况下,Mac 计算机不支持跟踪编译命令和创建 Polyspace 工程。如果您想在属于这些类别之一的 Mac 计算机上创建工程,请改为尝试从编译数据库创建工程。请参阅 Create Polyspace Options File from JSON Compilation Database。
如果在操作系统 macOS El Capitan (10.11) 或更高版本的 macOS 上启用了系统完整性保护 (SIP) 功能,则该功能会阻止跟踪编译命令的底层进程。在这种情况下,您可以暂时禁用 SIP 以创建 Polyspace 工程或从编译数据库创建工程。
类似的注意事项也适用于其他安全应用程序,例如 CylanceProtect、Avecto 和 Tanium 的安全相关产品。
采用基于 ARM 架构的 Apple 硅处理器的 Mac 计算机不支持跟踪编译命令。
如果在编译过程中计算机进入休眠状态,Polyspace 可能无法追踪您的编译。
在 Polyspace 用户界面中通过编译命令创建工程时,可能会遇到
libcurl.so.4: version 'CURL_OPENSSL_3' not found等错误。在这种情况下,请在系统命令行界面中使用命令polyspace-configure创建 Polyspace 工程,并将编译命令作为参量。请参阅polyspace-configure。
注意
Polyspace 在跟踪编译命令时会保留您的环境变量。