试图在32位窗口上运行64位testing

我们正在运行我们的unit testing,作为构build中的后期构build步骤。 现在,我们在自动构build机器上遇到了一个问题,它会自动在svn中抽取和构build每个版本。

autobuild脚本拉下修订版,做一些设置,然后调用devenv.exe / build。 这反过来会build立一切,然后尝试运行testing。 构build卡住,永远不会完成。

如果您手动构build解决scheme,那么在运行testing点上会发生一个popup对话框,说明testing可执行文件不是有效的Win32应用程序。 我假设autobuild以某种方式得到这个盒子,但隐藏在某个非交互式的会话。

到目前为止,我有两个解决scheme的想法:

  1. 签入试运行程序,尝试运行testing并检测故障。 这是不受欢迎的,但是因为这意味着创build这个额外的代码块,并添加它只能用于Windows的构build等。

  2. 以某种方式testing构build脚本中的Windows是32位还是64位(我们正在运行cmake),如果testing不起作用,则不要运行testing。 这是可取的,但是需要检查windows是32位还是64位,最好不用检查另一个“test-windows-type”辅助工具。

任何进一步的想法或提示如何实施build议2将不胜感激。

更新:这里请注意:这是一个在32位机器上运行的交叉编译,但编译一个64位exe。 如果我只能检查编译器的属性,就不会有问题。 但是,我是build造机器的属性,而不是构build本身,这显然是64位。

检查%PROCESSOR_ARCHITECTURE%环境变量:

  • x86在32位机器上。
  • 在64位机器上的AMD64 (参见这里 )。

你应该能够检查我认为是不同的32/64位窗口的CMake发电机。

不是你问的具体问题的答案,但你也许应该考虑在64位的机器上构建你的应用程序,它可以运行32位测试以及64位测试。

您可以检查构建脚本中的CMAKE_SIZEOF_VOID_P变量来检测类型。 在这里看文档。 那么如果这个变量是32,你可以跳过运行测试。

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

我发现了一种方法来确定系统是否是64位,应该可以从cmake访问。 这感觉是一个相当丑陋的破解,但可以打破任何随机版本的窗口,所以我宁愿找另一种方式。

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