主要内容

从编译系统创建工程的要求

要从编译系统自动创建工程,您的编译命令或 makefile 必须满足一定的要求。

编译器要求

编译命令要求

  • 您的编译命令必须在无需任何用户交互的情况下运行完成。

  • 在 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-configure command1 | command2
    在跟踪编译时,Polyspace 仅跟踪第一个命令。

  • 如果在操作系统 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 在跟踪编译命令时会保留您的环境变量。

另请参阅

主题