2011-09-06 131 views
3

如何組織多平臺(Windows,Linux)C/C++庫項目,常用的/推薦的方式是什麼?組織跨平臺的C/C++項目

如何命名函數並提供依賴操作系統的實現,組織包括等等?請僅提供建設性意見 - 不要指向「看看Linux」,ideas strongly welcome

+1

這沒有一個規則。不同的人有不同的理由。 – Mat

+1

我想要想法,沒有規則。 – Cartesius00

+0

然後重新檢查[faq](http://stackoverflow.com/faq#dontask)。對於每個答案都是同樣有效(主觀)的問題,本網站不太適合。 – Mat

回答

2

我用的文件夾把相關的頭/源文件如下例所示

FS/filesystem.hpp < - 主要通用頭那是你在包括任何項目,你可以在那裏創建一個#define來確保一個人只包含這個文件,如果他們在下面包含一個子文件,它會給出一個指向這個文件的編譯錯誤。

FS/LINUX/filesystem.hpp < - 用於Linux頭在主文件與#ifdef來LINUX包含(#include)以上

FS /窗/ filesystem.hpp < - 報頭用於與WINDOWS的#ifdef包含(#include)窗口在上述

FS/LINUX/filesystem.cpp <主要文件 - Linux中執行

FS /窗/ filesystem.cpp < - 實施窗口

然後在我的編譯系統中,使用「$ target」可以很容易地爲編譯包含相關的源文件。

關鍵是要創建一個可以的typedef和從用戶隱藏,讓他們只看到這是一個接口,而不是實現細節

我個人討厭在整個類定義多個操作系統的#ifdefs散落的源文件,類型,標題等等,爲了清晰和易於閱讀,我更喜歡將所有內容分解。

4

這裏取決於您使用的構建系統。許多跨平臺構建系統都有自己的組織方式。

至於代碼本身,它的情況並不少見,以提供一個標題,而是針對給定系統實現文件的鏈接,所以你可能有:

system.h 
system_linux.cpp 
system_windows.cpp 
system_osx.cpp 
... 

...對於依賴於操作系統的東西聚會。但總而言之,最好的方法是實際看一些(比Linux小的)多平臺項目:P。

2

CMake是一個很好的平臺構建系統。 Boost可在大多數平臺上工作。 Qt也很好。

嘗試保持較低的依賴關係數量。

CMake讓我們以平臺無關的方式提問有關平臺的問題。 Boost和Qt將平臺抽象掉,所以你不必關心(儘可能多的)。

+0

+1使用Boost和Qt來抽象出平臺。我幾乎從不需要再使用Windows或Unix API。 –

2

我使用的方法是將所有操作系統特定的功能封裝到我自己的界面中。然後我爲每個不同的操作系統(主要是Windows和Linux)實現此接口。

在編譯時,我使用預處理器來檢查它是哪個平臺,然後包含相應的版本。

我用線程,磁盤I/O和時鐘/時間做了很多。

例如:

#ifdef _WIN32 

#include <windows.h> 
#include "windows_code.h" 

#elif __linux 

#include <unistd.h> 
#include <pthread.h> 
#include "linux_code.h" 

#else 
#error "Unrecognized Platform" 
#endif