2016-08-05 32 views
4

我的任務是創建一個C++ SDK - 以動態庫的形式,很有可能。多平臺C++項目設置和工具

它應該是在不同的平臺上使用 - 的Windows(32/64位),Linux操作系統(32/64位),Mac OS中,Android的的iOS。我沒有太多的多平臺項目設置經驗,我試圖決定使用哪種方法和工具來進行最簡單的開發和部署。

備註:我還需要在Bamboo CI服務器上準備自動構建(作業),以便爲每個所需目標運行編譯和測試。

我的主要難題是:

  1. 項目設置。我應該爲不同的平臺準備不同的項目模式(例如Windows上的.sln和Linux上的makefile),或者嘗試使用像CMake這樣的工具?準備一個適合所有這些目標平臺的CMake項目甚至是可能的嗎?
  2. 編譯工具鏈。我應該爲每個平臺使用「本地」C++編譯器(如Windows上的MSVC和Linux上的GCC),或者像Clang + LLVM這樣的單一工具鏈? Clang + LLVM(以及某些鏈接器)是否甚至能夠爲我需要的所有這些平臺構建可分發的二進制文件?
  3. 開發環境。哪種OS/IDE最適合於這類項目?我更喜歡在Windows上工作,而我通常的IDE是Visual Studio--在這種情況下它是否可行,或者其他更合適?

我知道,我的問題是非常複雜的,有對任何這些點沒有直接的答案,但每一個意見,甚至部分答案將非常感激:)

+1

絕對使用像cmake這樣的工具。我會建議首先用gcc編譯,然後用visual進行測試(首先是可視化的,使用gcc編譯時可能會發現警告頁面),但這是我的觀點 – wasthishelpful

回答

2

正如你所說,沒有一種適合所有人的解決方案,所以我會提出一些一般性建議。隨意選擇,因爲你覺得是最有利的。

    • 如果您打算做你的建築物上的主機操作系統,cmake的聽起來像是你到底該工具。它自我描述爲一個「構建系統生成器」,其中構建特定主機操作系統的步驟被抽象化,這意味着相同的設置「應該」適用於任何系統cmake支持。
    • 如果您正在考慮交叉編譯,那麼您在iOS和MacOS目標中會受到一些傷害。據我所知,我已經付出了一些努力嘗試,蘋果公司並沒有爲他們的系統發佈編譯器,而這些系統沒有在他們的系統上運行 - >您將不得不從MacOS電腦編譯iOS和MacOS。如果你能在這一點上證明我錯了,我會很高興聽到它:)
    • 根據你的許可要求,如果你真的想要一個矯枉過正的解決方案,你可以看看Qt *和qmake。我的多架構解決方案運行得非常好,Qt支持您在原始問題中列出的所有系統。我發現Qt + qmake比cmake更容易處理。

*是,QT做非GUI工作相當不錯呢!

  1. 我在第一點涉及到了這一點,但我的一般建議是使用本機工具鏈。不包括MacOS,設置虛擬機,構建服務器等以構建本地代碼很容易,而且我對交叉編譯器的使用經驗總是會增加另一層心疼,甚至比遠程訪問單獨的構建器計算機還要糟糕。

  2. 如果您避免使用與系統相關的頭文件,庫或擴展名,那麼您使用的系統應該沒有關係。像<windows.h><linux/*.h>這樣的東西是顯而易見的,但跨平臺兼容性的最佳方式是可以驗證的,即儘可能經常測試外部系統。

    • 不確定使用的編譯器,我建議打開所有的警告。它們通常很重要,並且可能表明編譯器能夠解決問題的地方,但試圖編譯另一個系統會崩潰。如果你在一個團隊工作,那麼設置警告可能會導致構建錯誤,以確保團隊的其他成員與你一樣嚴謹。
    • 我不知道LLVM或MSVC,但GCC會給你一些關於platfom特定擴展的提示,如果你給它-pedantic-ansi標誌。作爲解釋here,這些標誌告訴GCC警告任何GNU特定的擴展。
+0

謝謝,這非常有用。只有一個問題 - 你認爲「過度殺傷解決方案」和「許可要求」是什麼意思?使用QT/qmake是否意味着某種限制? – Mithadis

+0

Qt是過度殺傷性的,因爲它是一個相當大的依賴項,根據你的需要,這可能是也可能不是問題。 Qt根據LGPL許可使用某些部分GPL,或者您可以支付商業許可。對於大多數情況LGPL並不是一個破壞交易的手段,但要確保你仔細研究它,以便知道你正在做什麼。 – Sompom

+0

@Mithadis - 抱歉,我昨天忘了標記你。我想確保你看起來是我的迴應。 – Sompom

1

你很可能會需要多個工具鏈(你提到了C++,它沒有ABI,因此在Windows上可以使用,或多或少需要使用CL來構建)。因此,您將無法使用單個供應商特定的項目設置。隨着項目的增長,維護多個版本的項目文件變得很難成立,因此您選擇構建系統至關重要。看看Shake並比較具有相似功能集的備選方案。 IDE的選擇並不重要 - 許多程序員更喜歡他們最喜歡的編輯器(Emacs或Vim),並且可能需要在任何支持的平臺上工作。