代码之家  ›  专栏  ›  技术社区  ›  slicedlime

尝试在32位Windows上运行64位测试

  •  2
  • slicedlime  · 技术社区  · 17 年前

    我们在构建中运行单元测试作为构建后步骤。现在我在我们的自动构建机器上遇到了一个问题,它可以自动地在SVN中提取和构建每个版本。

    autobuild脚本会下拉一个修订版,进行一些设置,然后在此基础上调用devenv.exe/build。反过来,这将构建所有内容,然后尝试运行测试。构建会被卡住,永远不会完成。

    如果手动构建解决方案,则在运行测试点处会出现一个弹出对话框,说明测试可执行文件不是有效的win32应用程序。我假设自动建筑也得到了这个盒子,但是隐藏在一个非交互的地方。

    到目前为止,我有两个解决方案:

    1. 签入尝试运行测试并检测失败的测试运行程序。但这是不可取的,因为这意味着创建这个额外的代码组合,并将其添加到仅用于Windows版本等。

    2. 以某种方式测试Windows在构建脚本中是32位还是64位(我们正在运行cmake),如果测试不起作用,就不要运行测试。这是可取的,但需要一种检查Windows是32位还是64位的方法,最好不要签入另一个“测试Windows类型”帮助工具。

    关于如何实施建议2的任何进一步的想法或提示将非常感谢。

    更新: 注意:这是一个在32位计算机上运行但编译64位exe的交叉编译。如果我能检查编译器的属性,就不会有问题。但我在追求 建筑机械 ,而不是构建本身,它显然是64位的。

    5 回复  |  直到 17 年前
        1
  •  1
  •   Mac    17 年前

    检查 %PROCESSOR_ARCHITECTURE% 环境变量:

    • x86 在32位机器上。
    • AMD64 在64位机器上(参见 here )
        2
  •  0
  •   JesperE    17 年前

    您应该能够检查cmake生成器,我认为它对于32/64位窗口是不同的。

        3
  •  0
  •   Mac    17 年前

    不是对您提出的特定问题的答案,但您可能应该考虑在X64计算机上构建应用程序,该计算机可以运行32位测试和64位测试…

        4
  •  0
  •   Hole    17 年前

    您可以检查构建脚本中的cmake-sizeof-void-p变量来检测类型。参见文档 here . 如果这个变量是32,那么可以跳过运行测试。

    更新 对不起,我忽略了你真正的问题。我认为最好的方法可能是应用 try-run 测试并使用运行结果变量来确定应用程序是否成功运行。

        5
  •  0
  •   slicedlime    17 年前

    我发现了一种识别系统是否是64位的方法,这应该可以从cmake访问。这感觉就像是一个相当丑陋的黑客,尽管它可以在任何随机版本的Windows上破解,所以我还是想找到另一种方法。

    %programfiles(x86)%环境变量仅存在于64位操作系统版本中。