2013-03-19 55 views
1

我正在使用visual studio 2010進行C++多平臺項目,所有平臺中都有一個代碼的共享部分,但是有很大一部分專用於每個平臺,我將它們分開使用#if def,但事實證明,儘管代碼維護變得非常複雜,代碼也很混亂,除了代碼不能在某些定義打開或關閉的情況下編譯時出現問題。用於C++多平臺項目的工具

有沒有Visual Studio的插件或工具可以幫助開發多平臺項目,例如隱藏與平臺相關的代碼,或者使用不同的#define開啓/關閉,檢查數據類型等。

我將不勝感激,如果任何人有一個建議

+0

使用'如果(kFeatureFoo)'代替'#如果kFeatureFoo'往往可以幫助:它意味着編譯器仍然必須檢查代碼是否有效的C++和去除僅由優化器中完成(unreachble代碼消除是一個通用的,魯棒優化) – MSalters 2013-03-19 11:29:25

回答

1

沒有「工具」,比的Visual Studio本身。將代碼分離到不同的項目中;項目爲每個平臺的通用代碼和項目。

不要忘記:

1. Add reference to common project in all platform-dependent projects (so common project is compiled before platform project). 
2. Add common project base to the common include directories of each target project. 

enter image description here

3

我不知道對於這樣VS插件做,但因爲它基本上是一個只有Windows版本的IDE,我懷疑有沒有。 (但當然我可能是錯的)

如果您正在尋找一個良好的跨平臺構建系統,我期待CMake。它功能強大,易於使用,並且可以爲幾乎任何流行的IDE /工具鏈(Visual Studio Solutions,Eclipse Projects,MinGW Makefiles,GNU Makefiles等)生成構建文件。

它使大型項目的跨平臺開發變得輕而易舉!

+0

好了,你讓我給予好評的CMake的,但它不是一個真正的微風;-) – Najzero 2013-03-19 10:22:35

+0

我想這是真的更穩定的逆風,但在我看來,這樣比人工交叉的持續性更好的暴風雨平臺開發。 ;) – Zultar 2013-03-19 10:34:45

+0

我也強烈推薦CMake。它適用於多平臺,多操作系統和多編譯器。我與64位Windows,但是我也有我的建立在Linux上的應用與變化不大的CMake的配置文件的Visual Studio的多個版本最使用它。而且CMake確實有管理定義的能力。 – drescherjm 2013-03-19 10:47:37

2

如果您切換到Qt框架,您可能會消除大部分依賴平臺的代碼。您可以繼續使用VS與Qt插件並使用Qt的平臺抽象,您可以使用(幾乎)相同的代碼庫來定位多個不同的平臺。你得到無與倫比的平臺支持和可移植性:

  • 的Windows
  • 的Linux(Qt是原產於KDE和Ubuntu的未來版本)
  • 的MacOS
  • BB10(Qt是原產於BB10太)
  • 嵌入式Linux
  • 的Android(即將下月)
  • 的iOS(下月太)
  • 喬爾一個
  • Tizen

這些API也更好IMO - 少醜陋而笨拙,更一致。另外QML(JSON樣式標記用於從使用JS進行膠合代碼和值綁定的C++組件構建應用程序)可以顯着提高您的工作效率(最多10次而不誇張)。 Qt工具鏈支持不同的工具包(庫版本編譯器和平臺的組合)以及多平臺交叉編譯。