常见问题

本部分中,我们会竭诚为您解答各种常见问题。若您在此部分或在 Knowledge Base 网页中仍未找到答案,请在 Support Center 中开单询问,我们将尽快为您解决。

问:我注意到 Incredibuild 运行期间,my project 中间目录中存在一些前缀为 "vcx0_ib_" (x 可能是"6"、"7” 或 "8")的文件。为什么会有这种情况?

答:这是正常情况。Incredibuild 会为参与构建的各 Agent 生成独立的调试信息和 .idb 文件,然后保存在中间文件夹内。

问:我比较 MSVC 创建的 OBJ/EXE 文件与 Incredibuild 的文件后发现,二者并不相同。这是为什么?

答:Incredibuild 和 MSVC 输出之间存在一些区别,这是由于调试信息布局、二进制文件时间戳、链接阶段 OBJ 文件顺序等所造成的。这属于正常现象,不会影响应用程序的运转。

问:用户如何临时禁用 Agent,以确保 Incredibuild 不占用机器 CPU?

答:右键点击 Incredibuild 任务栏图表,选择 Disable Agent。也可通过 Coordinator Monitor 远程操作。

问:通过命令行运行 BuildConsole 时,总是遇到 "'BuildConsole' is not recognized as an internal or external command, operable program or batch file."错误。这是为什么?

答:PATH 环境变量未设置到 Incredibuild 安装文件夹中。注意:BuildConsole 只能在安装有 Microsoft Visual Studio 的计算机上运行。

问:构建项目时,只有我机器上的 Agent 参与构建!

答:可能存在多种原因:

  • 您的机器上的 Agent 未订阅 Coordinator 机器。检查您的系统管理员,确认许可证是否允许添加您的机器到订阅 Agent 清单中。

  • 构建项目所需的扩展包未分配到您的 Agent 上。通过 Coordinator Monitor 分配构建系统包。检查您的系统管理员,确认许可证是否允许分配所需的扩展包到您的机器。

  • 项目所含的文件较少,因此不需要在 Agent 之间分布。

  • 您的机器中 Agent Settings 对话框内设置的 Coordinator 名称或端口错误。

  • Coordinator 目前不可用,因为其运行所在的机器已关闭或断网,或 Coordinator 服务未激活。

  • 您的机器已断网。检查网线和设置。

  • 网络安全限制阻止您的机器通过 TCP/IP 访问网络中的 Coordinator 机器或 Agent 机器。

  • 您的 Incredibuild 试用期已满。

问:我的 Incredibuild 任务栏图标不显示。要怎么恢复显示?

答:在 Start 菜单中,选择 Programs files->Incredibuild->Incredibuild Agent Tray-Icon,恢复显示任务栏图标。如果您想始终显示 Incredibuild 任务栏图标,确认在 Agent Settings 对话框 "Tray-Icon" 网页上,选中 Enable tray-icon display on system start-up 选项。

问:在 Microsoft Studio 中找不到 Incredibuild 菜单/工具栏!如何查看?

答:在 Agent Settings 对话框中选择 "Visual Studio Add-in",使用 "Add-in Installation removal' 部分,或 适用于 MSVC 6.0 的 "Fix menu" 和 "Fix Toolbar" 按钮,来恢复菜单和工具栏。注意:MSVC 6.0 插件要求使用机器的各用户必须单独安装插件。通过此对话框可完成。如果只有工具栏缺失,可能只是因为工具栏隐藏了。要确认是否属实,在 Microsoft Studio 中右键点击工具栏,确认以 "Toolbar" 开头的所有工具栏均选中。

问:用 Incredibuild 构建项目时,不生成浏览信息,而用 MSVC 构建时,就会生成。这是为什么?

答:Incredibuild 采用全局设置确定是否生成浏览信息。可以通过 Agent Settings 对话框中的 "Build System”选项卡进行设置。也可以在 Batch Build 对话框中构建项目时,针对特定项目覆盖设置。

问:我不断收到警告 "Incredibuild: build system warning: #import directives in the precompiled header should use the no_implementation attribute.See FAQ section in documentation for more details."。出了什么错?

问:Incredibuild 在通知您:预编译的标头源文件中发现了 #import 指令,无 "no_implementation” 关键字。这个问题可能由两种原因引起:

当源文件包含 PCH 生成的 .TLI 文件时,可能会出现 "file not found” 编译错误。在 PCH 文件中使用 #import,导入 "no_implementation” 标记,如下所述,即可解决。不使用此关键字,可能导致 PCH 文件过大,降低编译速度。以下内容节选自 SDN Library "#import” 主题:"implementation_only 属性拟结合 no_implementation 属性使用,可以确保在预编译标头 (PCH) 文件外实施。带 no_implementation 属性的 #import 语句存放在用于创建 PCH 的源区内。生成的 PCH 供一系列源文件使用。带 implementation_only 属性的 #import 语句在 PCH 区外使用。只能在其中一个源文件中使用。这样会生成各种所需的成员包装功能,而无需编译源文件。"

问:编译时,标头文件/类型库文件出现 "No such file or directory” 错误。

答:检查文件是否通过自定义构建步骤或工作区内其它项目的 MIDL 步骤生成。如是,可能是因为工作区缺失项目间依赖项定义缺失所致。更多信息,请参阅("Advanced Topics”下)有关 “Dependency Issues” 的文档。

问:编译时,编译器似乎用了不同版本/旧版本的标头文件/类型库文件。

答:请参阅上一问题的答案。

问:在 Build Monitor 中查看 Output 视图,很多已编译的文件不显示。出了什么错?

答:编译时,Incredibuild 会缓存部分配置的构建输出,以确保各配置输出不会相互混淆。要查看各配置的全部输出信息,请使用 Projects 视图。输出显示会逐渐显示整个构建输出。

问:用 Incredibuild 构建后,当用 MSVC 进行增量构建时,我收到以下警告:"warning C4652: compiler option 'Generate Browser Info' inconsistent with precompiled header; current command-line option will override that defined in the precompiled header"。出了什么错?

答:Incredibuild 的浏览信息创建选项与 MSVC 处理项目浏览信息的方式发生冲突。请采取以下任意方式解决问题:

  • 如果您要使用浏览信息:
    • 在配置中设置项目生成浏览信息(在 MSVC 的项目设置对话框中,在 C/C++ 网页和 Browse info 网页上选中浏览信息勾选框,即可实现)。
    • 通过 Incredibuild 的浏览信息创建设置(在 Agent Settings 对话框中)来为此配置创建浏览信息(选择 "Always" 或 "According to 'Generate browse info' project setting"即可实现)。
    • 重新构建项目。
  • 如果您不需要使用浏览信息:
    • 在配置中设置项目不生成浏览信息。
    • 通过 Incredibuild 的浏览信息创建设置(在 Agent Settings 对话框中)而不要为此配置创建浏览信息(选择"Never" 或 "According to 'Generate browse info' project setting",或使用匹配搜索词汇的方式实现)。
    • 重新构建项目。

问:在我的机器上,Incredibuild Agent 无法启动。出了什么错?

答:可能存在多种原因。进行以下步骤,确定原因:

  1. 如果 Incredibuild Agent 任务栏图标显示错误图形,单击任务栏图标查看 Incredibuild Agent 业务最后一次遇到的错误,并确定问题是否由此错误所致。
  2. 从安装有相同操作系统的其它机器中重复文件,尝试替换 Windows/System32 文件内的以下文件:perfc009.datperfd009.dat。若否,运行 Windows 设置安装程序,恢复系统文件。
  3. 联系 Incredibuild Support,提供有关该问题的详细信息。

问:构建工具运行时,部分 Agent 开始编译文件,但编译还没结束就停止了,文件编译工具条消失。出了什么错?

答:可能是因为网络配置错误。为确保 Incredibuild 运行正常,进行以下所有测试:

  • 在构建机器端,利用其 IP 地址,对问题 Agent 进行 Ping 测试。
  • 在构建机器端,利用其网络名称,对问题 Agent 进行 Ping 测试。
  • 在问题 Agent 端,利用其 IP 地址,对构建机器进行 Ping 测试。
  • 在问题 Agent 端,利用其网络名称,对构建机器进行 Ping 测试。

问:我已经安装了 Incredibuild 永久/临时许可证,但尝试构建时,收到消息说构建将以单机模式运行。我做错了什么?

答:可能是您的 Agent 未订阅,或所需的构建系统扩展包未分配到您的 Agent。要修复此问题,请采取以下操作:

  1. 打开 Coordinator Monitor。
  2. 从 Agent 列表中找到您的 Agent。
  3. 如果 'Status’ 栏为 'Unsubscribed',右击 Agent,选择 Subscribe。
  4. 如果 'Subscribe’ 选项呈灰色,说明您的许可证已经超过所订阅 Agent 的期限,您必须先取消订阅 Agent。
  5. 如果 'Packages’ 栏为 'Helper’ 或您采用的是不同的 MSVC 版本构建项目,右击 Agent,利用 'Allocate Package’ 选项,分配适当的构建系统扩展包到您的 Agent。

问:我已经安装了支持多 CPU/多核的 Incredibuild 永久/临时许可证,但构建时只使用了一个处理器。我应该怎么做?

答:您的 Agent 可能缺少 "Multiple CPU(s)/Core(s)” 的扩展包。要修复此问题,请采取以下操作:

  1. 打开 Coordinator Monitor。
  2. 从 Agent 列表中找到您的 Agent。
  3. 右击 Agent,选择 Allocate Package->Multiple CPU(s)/Core(s)
  4. 如果该选项呈灰色,说明您的许可证已经用完了所有 "Multiple CPU(s)/Core(s)” 扩展包,您必须先取消分配一个 Agent 的扩展包。

问:我不断收到警告:"One or more source files use automatic precompiled headers.This setting is not recommended and may degrade build performance.See FAQ section in documentation for more details.” 出了什么错?

答:您的项目使用了 "Automatic” 预编译标头。结合 Incredibuild 使用时,该设置会对构建性能产生不利影响,因此不推荐采用此设置。为解决这一状况,您可以使用标准(基于标头的)预编译标头或禁用所有预编译标头。

问:Edit & Continue 不工作。出了什么错?

答:Incredibuild 支持 Edit & Continue,但要求使用该功能的文件必须先在 Solution Settings 对话框中指定。更多信息,请参阅用户手册相应页面。

问:构建时,我发现两个编译工具栏显示同一文件在两个不同机器上编译。这正常吗?

答:是的,实际上这属于优化特性。为防止因远程 Agent 较慢导致构建速度下降,Incredibuild 有时会在本地机器上重复进行文件编译,以加快构建速度。在这种场景下,相同文件会编译两次。

问:为什么当我移动内部构建监控标签时,Visual Studio会崩溃?

答:这是一个 Visual Studio 16.8.2 的 known Microsoft bug ,已在 16.8.5 中解决。

定价和许可

问:我应该使用多少 Coordinator 和 Agent?

答:您的许可证中的 Coordinator 数量对应会使用 Incredibuild 的工作组数量。各 Coordinator 控制一组单独的 Agent,相互之间可以运行分布式构建工具。在一个以上的 Coordinator 之间分配 Agent,可以不收取额外费用;然而,请记住,在一个以上的 Coordinator 之间分配一定数量的 Agent 意味着每个组的处理能力较低。有两种基本类型的 Agent:Helper Agent,不能启动构建,但可以为分布式构建提供处理能力,还有 Builder Agent,可以启动分布式构建。Builder Agent 还包括 Helper Agent 功能。通常所有启动构建的机器都需要 Builder Agent,而一些为分布式构建提供处理能力的机器则需要 Helper Agent。要想知道哪种许可证结构最适合你的需要,最好的办法是使用 Incredibuild 投资回报率计算器。它可以给出详细的解释和报价。

问:怎样才能在现有许可证中增加更多的 Agent?

答:发送邮件至我们销售部邮箱 sales@Incredibuild.com,说明您当前许可证的详细信息以及所需的许可证变更。我们将联系您,指导您更新许可证。

问:我的许可证试用期到期了,我需要再等几天才能最终确定购买。试用期可以延长吗?

答:当然可以。您只需要填写 Trial Period Extension Form,几天内,就能获得 2 周的延期许可文件。

问:我拥有许可证,但想在多个地点共享许可。这样可以吗?

答:是的。对于含有效维护服务的许可证,免费提供多地点共享服务。如果您想将某一地点所用的部分 Agent 转移到其它地点,请联系我们 sales@Incredibuild.com,我们将为您提供相关详细信息。

技术信息

问:我是否在 Incredibuild 上建立了任何形式的依赖关系?我还可以结合安装到机器上的 Incredibuild,使用 Visual Studio 的 Build 命令吗?

答:不论 Incredibuild 是否存在,MSVC 的标准 Build 操作(从 Visual Studio IDE 以及从命令行)均可随时使用。这意味着您可以随着返回常规构建。如果使用构建脚本,脚本必须进行略微修改(用 Incredibuild 命令行替换 VC 的命令行)。

问:我是否需要更改 C++ project,才能运行 Incredibuild?

答:不需要。Incredibuild 可以构建利用 Visual Studio 构建的所有 C/C++ 项目。在某些情况下,必须增加项目依赖关系信息,以便按正确顺序构建多个项目。

问:Incredibuild 安装后,Microsoft Visual Studio 环境会如何变化?

答:出现含 Build、Rebuild、Clean、Batch Build 和 Stop Current Build 命令的 Incredibuild 菜单和工具栏。只需要说明这些命令即可,不必使用 VC 命令。构建时,输出会在专门的 "Build Monitor” 显示屏上显示(同样集成到环境中),包括构建输出以及其它有用特性,如构建进度条、可视进度显示、时间等。

问:通过命令行或构建脚本可使用 Incredibuild 吗?

答:是的。Incredibuild 包括用于构建项目的强命令行界面,可轻松集成到运行 msdev.exe/devenv.exe/msbuild.exe 的各种脚本中,以便构建项目。实际上,BuildConsole.exe 支持 devenv/msdev 命令行语法,从而确保您只需要在脚本中更换可执行程序名称即可。

问:构建 Visual Studio 项目时,Incredibuild 在构建的哪些部分发挥了作用?

答:Incredibuild 在 C/C++ 编译和 MIDL 步骤中发挥了作用。此外,利用 Dev Tools 扩展包,您可以分配自定义构建步骤、构建事件(预构建、预链接、构建后)和文件运行自定义规则。

问:当 Incredibuild 用于编译 C++ 项目时,我怎样才能知晓 Incredibuild 高效运行?

答:最简单的办法就是试一试。不过,经验表明,对于涉及较少文件数量的大部分项目,Incredibuild 会缩短大约 10%-30% 的完整构建时间,增量构建时间缩短 10%-75%(根据所编译的文件数量而定)。

问:Incredibuild 认可的输入文件格式有哪些?

答:Incredibuild 兼容 Microsoft Visual C++ 6.0 项目 DSP/DSW 文件;Microsoft Visual C++、.VCPROJX 和 .SLN 文件;MSVC 2008/2005/.NET .VCPROJ 和 .SLN 文件;Intel C++ Compiler .icproj 文件;和内置 VC 4.0 .vcw/.vcp 文件。Incredibuild 还可结合各种 Make 和构建工具使用,如 Make、gmake、vsimake、GnuMake、jam 以及 Supported Make and Build Tools 中所列的各种工具。

问:Incredibuild 能修改编译或链接进程吗?是否会导致构建输出出问题?

答:不需要。Incredibuild 在所有构建步骤(编译、链接等)中使用相同的可执行程序。Incredibuild 不是新的编译器,而是高效的编译器使用方法。

问:Incredibuild 会因为分布式编译进程导致我所在组织内的其他用户机器速度减慢吗?

答:Incredibuild Agent 会根据安装所在机器的活动等级,自动调整行为。Agent 默认按优先级低于系统其它进程的原则,运行编译。这样可以确保:相比用户和操作系统进程,操作系统会向 Incredibuild 分配更少的 CPU 资源。因此,不用的计算机全速运行 Incredibuild,而在其它工作计算机中,Agent 处于较低活动水平。正常情况下,在其机器上用户甚至感觉不到 Incredibuild Agent 的存在。

问:Incredibuild 会占用所有 LAN 宽带吗?

答:不需要。我们采用了各种网络优化措施,如缓存和压缩,确保尽量减少网络流量。在标准网络中,用户几乎感觉不到 Incredibuild 的存在,即便多个编译同时进行。

问:工作站无法共享同一配置。工作站的操作系统、MSVC 版本、业务包、dll 版本等有所不同。这样会出现问题吗?

答:在远程 Agent 上执行构建操作时,所有操作均采用 “虚拟环境” 执行,虚拟环境是原始构建机器环境的副本。这意味着编译中所用的编译器可执行程序与构建机器中的完全相同。实际上,远程 Agent 上甚至可以不配置相关可执行程序。

问:我发现在 Incredibuild 安装文件夹下,名为 "File Cache” 的文件夹占用了很多磁盘空间。它是用来做什么的?

答:这个文件夹缓存了来自远程 Agent 的源文件,以便加快分布式构建的速度。这个文件夹的大小应足以包括所有源代码树和包括所用文件的各种系统。文件夹大小和位置可通过 Agent Settings 对话框和 Coordinator monitor 调整。

问:我要如何调整脚本,确认构建是否用 Incredibuild 运行?

答:Incredibuild 自动定义 "IncredibuildContext” 环境变量,构建运行时,变量值为 "1"。您可自定义构建步骤,查询该环境变量,确认构建是否用 Incredibuild 运行。

问:我知道 Incredibuild 利用网络协议移动文件并执行程序。那么贵公司采取了哪些预防措施确保 Incredibuild 安全,不受安全威胁?

答:首先,Incredibuild 的许可证配置列出了经”授权“可加入系统的 Agent,保护您的环境,避免可能尝试滥用授权工作组以外系统的情况。其次,我们还尽可能确保网络协议安全,避免遭遇互联网威胁。最后,所有文件活动均在封闭的虚拟环境下进行,从而确保即便上述措施仍不能避免尝试滥用系统时,您的文件不会受损。除上述措施外,若您所在组织安装了任何安全架构(防火墙等),也有利于 Incredibuild 保证安全。

问:我在项目中使用了预编译标头。Incredibuild 是否支持?关于预编译标头,我需要了解哪些内容?

答:是的,Incredibuild 支持采用 Precompiled Header 的项目,并加速采用 PCH 的项目发展。尤其是,我们已经知道,当结合 Incredibuild 使用时,”自动" PCH 会降低构建速度。如果您使用了自动 PCH,我们的建议是要么切换至基于标头的标准 PCH,要么禁用所有 PCH。

问:我使用了 Visual Studio 的浏览信息功能。使用 Incredibuild 时,该功能是否仍然可用?

答:是的,Incredibuild 支持创建浏览信息文件。

问:我的一些项目包含自定义、预构建、预链接和构建后步骤。Incredibuild 是否支持?

答:是的。自定义构建步骤和构建事件可在构建机器本地执行(如果该机器配有多个 CPU,各 CPU 上若干步骤可并列运行)。

问:我的项目采用 COM 对象,需要 DLL 和类型库以编译部分文件。Incredibuild 如何处理?

答:所有编译在虚拟环境下进行。虚拟环境是构建机器环境的副本。这说明,不论远端机器上的文件和 DLL 如何,都会基于原始机器上发现的 DLL 和文件生成编译输出。

问:我的部分源文件保存在网络设备中。这会对 Incredibuild 行为和表现带来哪些影响?

答:Incredibuild 可以访问网络上的文件。实际上,这样效率更高。得益于其缓存机制,当编译包含网络文件的项目时,相比 VC,Incredibuild 的效果更好。

问:Incredibuild 如何确定哪些机器参与构建?

答:Incredibuild Coordinator 掌握各 Agent 的 CPU 强度、当前 CPU 活动水平和影响 Agent 编译效率的其它因素。构建开始时,Coordinator 会向该构建分配当前可用的最有效 Agent。由于 Agent 的可用性会不时变化,在整个构建过程中,初始分配可能会变化。例如,若用户在参与远程构建的机器上启动需要占用大量 CPU 资源的任务,那么该机器可能会立即停止编译,同时其他机器会分配到该构建替代工作。

问:如果多个 Agent 同时启动构建,会发生什么情况?

答:在这种情况下,Incredibuild Coordinator 会尝试以各构建平等分享系统中可用 CPU 的方式,向构建分配 Agent。

问:如果构建时 Coordinator 因故不可用,会发生什么情况?

问:尽管 Coordinator 负责管理可用于远程编译的资源,但它并不是构建成功与否的关键组件。如果构建开始后 Coordinator 组件因故无法使用,在当前 Agent 分配条件下,构建会继续进行,直至完成为止。后续构建工作将处于单机模式,直至 Coordinator 恢复可用为止。为确保最高可用水平,您可以安装 "Backup Coordinator",在主 Coordinator 不可用时自动控制。

问:若构建期间,正在进行远端机器编译的 Agent 突然不可用,会发生什么情况?

答:如果 Agent 不可用或因太过忙碌而无法高效编译时,它会停止工作,正在编译的文件会重新分配到其它 Agent。构建继续,不会中断。

问:我使用了 MSVC 以外的其它编译器/链接器,以获得更好的代码优化效果。不过我仍然使用 Visual Studio 开发和构建项目。Incredibuild support 是否支持我所用的编译器?

答:目前 Incredibuild 支持 Microsoft 的 cl.exe(所有 Visual Studio、eVC、Xbox 和 Xbox 360 平台)和 Intel C++ Compiler。未来还会支持更多的编译器。Incredibuild 的 Make and Build Tools Package 可结合 NVidia、CUDA 编译器、vxworks、Xbox One、Nintendo 和 play station tool chains 使用。

问:Incredibuild 是否支持多处理器机器?

答:是的。Incredibuild 可利用额外处理器缩短编译时间。

问:Incredibuild 是否支持 Xbox 项目?

答:是的。Incredibuild 完全支持 MSVC .NET 平台上 Xbox 项目的分布式构建。

问:Incredibuild 是否支持 Xbox 360 和 Xbox One 项目?

答:是的。Incredibuild 完全支持 Xbox 360 和 Xbox One 项目的分布式构建。

问:我可以在标准机器上使用 Incredibuild 吗?

答:是的,只要您拥有多 CPU 机器,您就可以通过 Incredibuild 利用机器处理器并大幅提高编译速度。

问:Incredibuild 安装后,我必须手动复制机器之间的文件、注册 DDL或执行任何准备操作,才能编译项目吗?

答:不是的,Incredibuild 自身会完成所有同步,且操作均在虚拟环境下进行。计算机的文件系统保持不变,无需安装 DLL 等。

问:一个 Incredibuild 环境中可以设置多少个 Agent?

答:一个 Incredibuild Coordinator 可以有效满足 500 多个 Agents 运行。如果需要更多 Agent,建议您划分环境为多个工作组,各个工作组均配置 Coordinator。

问:是否可以在同一机器上安装 Agent 作为 Coordinator?

答:当然可以,甚至这种做法更常见。Coordinator 是一种不会占用太多资源的轻型组件。不过,尽量不要在机器上安装性能极差的硬件。

问:我可以用 Incredibuild 构建基于 makefile 的项目吗?

答:凭借 Incredibuild 3.0 中引入的 Dev Tools Interfaces 扩展包,Incredibuild 可以利用各种 Make 和构建工具,如, Supported Make and Build Tools 中所列工具,分配构建。用户手册