2017-12-27 471 views
2

我將爲Windows和Unix操作系統體系結構開發一個命令行工具。但是我正在面臨一場鬥爭。我怎樣才能使代碼在Windows和Unix之間有效地轉換?Microsoft Visual Studio:Windows和Unix項目源代碼兼容性

項目將主要使用MS Visual Studio C++語言編寫。不過,我希望我的工具是跨平臺的,所以我可以在Windows和Unix系統中使用它。由於Unix不支持Visual Studio,因此我需要在某種程度上設計代碼結構以支持兩種體系結構(都是32位),並且OS專用標頭需要包含在代碼所在的唯一一個操作系統體系結構中。

所以我在尋求你的幫助。爲Windows和Unix維護幾乎相同的代碼的最有效方法是什麼?對於該特定操作系統的所有必需頭文件?所以我可以在Windows中創建program.exe文件,在Unix中創建program.run文件?測試當前操作系統體系結構(Windows或Unix)的一些條件,幷包括與操作系統相關的頭文件?

怎樣編碼?由於Windows命令行使用MS-DOS編碼(在中歐,它是DOS代碼頁852),Unix終端使用UTF-8編碼。我的工具將是多語言的(與貢獻者,從我的身邊開始英語和捷克語)。

我需要保持代碼結構儘可能小,當然也容易維護。源代碼應該可用於來自GitHub存儲庫的克隆/分支。

如果這不是適合堆棧溢出的問題,那麼只需告訴我,我會刪除它。只是尋求幫助,沒有別的。

+0

開始使用'CMake'來生成你的項目。如果可能,請勿直接使用任何操作系統功能。使用標準的C++。如果你需要一些操作系統功能,看看增強提供你想要的。使用git代碼。不要將任何二進制文件或甚至生成的文件(如項目文件)放入僅存儲庫的源代碼中。 – drescherjm

+0

是的,使用'cmake'。它現在支持VS 2017,並且可以幫助標題差異,而不必製作特定於操作系統的東西。如果這是不可避免的,請將該代碼放入操作系統抽象層。 – zzxyz

+0

我有VS 2015社區版。它支持CMake嗎? – Polda18

回答

3

步驟1)設置您的持續集成系統,從第一天起每次都在Windows和Unix上構建代碼。最好在每個平臺上有多個編譯器。

步驟2)使用跨平臺構建系統,如sconscmake

步驟3)不要在程序中使用任何平臺相關的代碼在所有 - 當你來,實現在各種ifdef警衛多個版本。優先使用跨平臺庫。

步驟4)請確保您有足夠的單元測試(特別是對位,你必須使用特定於平臺的代碼來實現的東西多次),並確保您的CI系統運行所有測試爲每次提交。

步驟5)確保從第一天開始所有文本都是UTF-8編碼 - 轉換爲其他編碼可以發生在顯示層,但在內部保留UTF-8的所有內容。

步驟6)在所有支持的平臺上進行大量的手動測試。

並確保調整每個編譯器的警告設置waaay併發出警告錯誤(並修復所有這些錯誤)。在一個平臺上使用一個編譯器的警告通常會在另一個平臺上以不同編譯器的方式靜默編譯。

+0

好的,謝謝你的提示。在我的Windows機器上安裝CMake 3.10.1,並將其安裝到我的Linux虛擬機中... – Polda18

+0

@ Polda18 - Linux VM?如果可以的話,我會在Windows 10中查看WSL功能。與虛擬機相比,它非常便於開發。虛擬機是好的,當然會起作用。 – zzxyz

+0

@zzxyz - 你的意思是Ubuntu Shell功能?開機後,我的安裝被破壞並立即關閉。甚至不想要卸載修復... – Polda18

0

首先,Windows控制檯可以使用utf-16,但不能使用utf-8。其次,如果你堅持使用標準的C++庫,可能使用boost進行擴展(必須安裝在windows和任何你將建立的* nix系統上),只要你在說話,你真的不應該有任何問題關於嚴格接受執行工作和打印結果的命令行參數。

如果你談論的是終端控制(即,屏幕某處比下一個字符細胞等,特別是要落後於印刷)這將是更困難不少。

我會,不過,建議您使用cmake的基於項目時,Visual Studio通常使用自定義的MSBuild構建管理和是不會幫助,如果你嘗試的* nix系統建設。