如何組織多平臺(Windows,Linux)C/C++
庫項目,常用的/推薦的方式是什麼?組織跨平臺的C/C++項目
如何命名函數並提供依賴操作系統的實現,組織包括等等?請僅提供建設性意見 - 不要指向「看看Linux」,ideas strongly welcome
。
如何組織多平臺(Windows,Linux)C/C++
庫項目,常用的/推薦的方式是什麼?組織跨平臺的C/C++項目
如何命名函數並提供依賴操作系統的實現,組織包括等等?請僅提供建設性意見 - 不要指向「看看Linux」,ideas strongly welcome
。
我用的文件夾把相關的頭/源文件如下例所示
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散落的源文件,類型,標題等等,爲了清晰和易於閱讀,我更喜歡將所有內容分解。
這裏取決於您使用的構建系統。許多跨平臺構建系統都有自己的組織方式。
至於代碼本身,它的情況並不少見,以提供一個標題,而是針對給定系統實現文件的鏈接,所以你可能有:
system.h
system_linux.cpp
system_windows.cpp
system_osx.cpp
...
...對於依賴於操作系統的東西聚會。但總而言之,最好的方法是實際看一些(比Linux小的)多平臺項目:P。
CMake是一個很好的平臺構建系統。 Boost可在大多數平臺上工作。 Qt也很好。
嘗試保持較低的依賴關係數量。
CMake讓我們以平臺無關的方式提問有關平臺的問題。 Boost和Qt將平臺抽象掉,所以你不必關心(儘可能多的)。
+1使用Boost和Qt來抽象出平臺。我幾乎從不需要再使用Windows或Unix API。 –
我使用的方法是將所有操作系統特定的功能封裝到我自己的界面中。然後我爲每個不同的操作系統(主要是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
這沒有一個規則。不同的人有不同的理由。 – Mat
我想要想法,沒有規則。 – Cartesius00
然後重新檢查[faq](http://stackoverflow.com/faq#dontask)。對於每個答案都是同樣有效(主觀)的問題,本網站不太適合。 – Mat