从编译系统创建工程的要求
要从编译系统自动创建工程,您的编译命令或 makefile 必须满足一定的要求。
编译器要求
您的编译器必须在本地调用。
如果您使用了编译器缓存(如
ccache)或分布式编译系统(如distmake),软件将无法追踪您的编译过程。您必须停用它们。您的编译器必须执行一次干净的编译。
如果编译器只执行增量编译,请使用适当的选项来编译所有源文件。例如,如果您使用
gmake,请附加-B或-W选项以强制进行干净编译。有关 GNU®makefileNamemake允许的选项列表,请参阅 make 选项。您的编译器配置必须可供 Polyspace® 使用。目前支持的编译器包括以下几种:
Arm Keil。
ARM® v5。另请参阅
ARM v5 Compiler (-compiler armcc)。ARM v6。另请参阅
ARM v6 Compiler (-compiler armclang)。Clang。有关支持的版本列表,请参阅 Clang 编译器。
Cosmic。另请参阅
Cosmic Compiler (-compiler cosmic)。Wind River® Diab。另请参阅
Diab Compiler (-compiler diab)。Green Hills®.另请参阅
Green Hills Compiler (-compiler greenhills)。GNU C/C++。有关支持的版本列表,请参阅 GCC 编译器。
IAR Embedded Workbench。另请参阅
IAR Embedded Workbench Compiler (-compiler iar-ew)。IAR 系统。
Intel® C++ Compiler Classic (icc/icl) 编译器。另请参阅
Intel C++ Compiler Classic (icc/icl) (-compiler intel)。Microsoft® Visual C++®.有关支持的版本列表,请参阅 Visual Studio 编译器。
MPLAB XC8 C。请参阅
MPLAB XC8 C Compiler (-compiler microchip)。请注意,编译必须使用
xc8-cc可执行文件。不支持旧版 MPLAB XC8 编译器(版本低于 v2.0)以及使用picc可执行文件的 MPLAB C18 编译器。NXP CodeWarrior®。请参阅
NXP CodeWarrior Compiler (-compiler codewarrior)。Renesas®.请参阅
Renesas Compiler (-compiler renesas)。Altium® Tasking。请参阅
TASKING Compiler (-compiler tasking)。Texas Instruments®.另请参阅
Texas Instruments Compiler (-compiler ti)。tcc - Tiny C Compiler
如果 Polyspace 无法访问您的编译器配置,请:
为您的编译器编写一个特定格式的编译器配置文件。有关详细信息,请参阅Create Polyspace Projects from Build Systems That Use Unsupported Compilers。
联系 MathWorks 技术支持。有关详细信息,请参阅Contact Technical Support About Issues with Running Polyspace。
如果您在 Cygwin™ 中编译代码,请使用 Cygwin 的 2.x 或 3.x 版本从编译系统(例如,Cygwin 版本 2.10 或 3.0)创建 Polyspace 工程。
使用 TASKING 编译器时,如果使用了扩展名为
.asfr的替代 sfr 文件,Polyspace 可能无法找到该文件。如果遇到错误,请使用选项Include (-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
如果在操作系统 macOS El Capitan (10.11) 或更高版本的 macOS 版本上启用了系统完整性保护 (SIP) 功能,则只有当您的编译系统支持生成可传递给
polyspace-configure的编译数据库文件时,才能使用polyspace-configure来生成工程或编译选项文件。请参阅从 JSON 编译数据库创建 Polyspace 选项文件。如果您的编译系统不支持生成编译数据库文件且 SIP 功能已启用,Polyspace 将无法跟踪您的编译命令。或者,您可以在跟踪编译命令之前先禁用 SIP 功能。等跟踪编译命令完成后再重新启用此功能。类似的注意事项也适用于其他安全应用程序,例如 CylanceProtect、Avecto 和 Tanium 的安全相关产品。
如果在编译过程中计算机进入休眠状态,Polyspace 可能无法追踪您的编译。
在 Polyspace 用户界面中通过编译命令创建工程时,可能会遇到
libcurl.so.4: version 'CURL_OPENSSL_3' not found等错误。在这种情况下,请在系统命令行界面中使用命令polyspace-configure创建 Polyspace 工程,并将编译命令作为参量。请参阅polyspace-configure。
注意
Polyspace 在跟踪编译命令时会保留您的环境变量。