2009-09-07 87 views
2

我們正在將我們的單元測試作爲構建中的後期構建步驟運行。現在,我在自動構建機器上遇到了一個問題,它會自動在svn中抽取和構建每個修訂版本。試圖在32位窗口上運行64位測試

自動構建腳本會拉下修訂版,執行一些設置,然後調用devenv.exe/build。這反過來會構建一切,然後嘗試運行測試。構建卡住,永遠不會完成。

如果您手動構建解決方案,運行測試點會發生什麼情況是彈出對話框,指出測試可執行文件不是有效的Win32應用程序。我假設autobuild以某種方式得到這個盒子,但隱藏在某個非交互式會話中。

我有這個迄今爲止解決兩個想法:

  1. 檢查中嘗試運行測試和檢測故障的測試亞軍的應用程序。這是不受歡迎的,但因爲這意味着要創建這些額外的代碼並將其添加到僅用於Windows版本等。

  2. 以某種方式測試Windows在構建腳本中是32位還是64位(我們'重新運行cmake),並且如果他們不工作就根本不運行測試。這是可取的,但需要檢查Windows是32位還是64位,最好不用檢查另一個「測試窗口類型」輔助工具。

任何進一步的想法或提示如何實施建議2將不勝感激。

更新:注意這裏:這是一個交叉編譯在32位機器上運行,但編譯64位exe。如果我可以檢查編譯器的屬性,那就不會有問題了。但是我在構建機器的屬性之後,而不是構建本身,這顯然是64位。

回答

1

檢查%PROCESSOR_ARCHITECTURE%環境變量:

  • x86 32位機器上。
  • AMD64在64位機器上(參見here)。
+0

聽起來就像我一直在尋找。只有奇怪,我可以找到與此是運行cygwin似乎覆蓋x86的價值。 – slicedlime 2009-09-07 13:46:52

0

你應該能夠檢查我認爲是不同的32/64位窗口CMake生成器。

+0

CMake生成器是64位,因爲我們正在編譯一個64位的exe ...所以這並沒有什麼幫助。這是一個在32位盒子上運行的交叉編譯。 – slicedlime 2009-09-07 12:07:26

0

您可以檢查構建腳本中的CMAKE_SIZEOF_VOID_P變量以檢測類型。請參閱文檔here。然後,如果此變量爲32,則可以跳過運行測試。

更新:對不起,我忽略了您的實際問題。我認爲最好的方法可能是應用try-run測試並使用RUN_RESULT_VAR來確定應用程序是否成功運行。

+0

指針的大小反映了構建的設置(就像cmake生成器一樣,像其他人所建議的那樣),而不是構建機器的屬性。 – slicedlime 2009-09-07 12:53:14

0

不回答你問的具體問題,但你或許應該考慮建立一個x64的機器,它可以運行32位的測試,以及64位測試您的應用...

+0

那麼,在XP上運行構建還有其他很好的理由。最好能做到這一點,但如果我必須選擇,我將不得不與32位盒。可悲的是,我現在必須選擇此刻。 – slicedlime 2009-09-07 12:52:37

+0

XP有64位版本。 – 2009-09-07 12:58:18

+0

對不起,有點不清楚,應該說它運行在32位XP上。 – slicedlime 2009-09-07 13:00:05

0

我找出了一種方法來確定系統是否是64位,這應該可以從cmake訪問。雖然這可能會破壞任何隨機版本的Windows,但感覺這是一種相當醜陋的破解,所以我寧願找另一種方式。

%ProgramFiles(x86)%環境變量僅在64位操作系統版本中存在。

相關問題