編譯系統對跨平臺代碼的支持

問題

原由

  • 項目須要跑在不一樣的平臺上
  • 不但願代碼中摻雜大量的define宏作平臺判斷(有潔癖呀~~~
  • 定義一些通用宏來處理只能解決一些類型差別的問題

處理

  • 將跨平臺代碼寫入不一樣的文件夾下 os/linuxos/win
  • 在外部暴露的.h文件加入判斷宏
//file: public.h
#ifdef WIN32
#    include "os/windows/public.h"
#else
#    include "os/linux/public.h" 
#endif //WIN32
  • 其餘代碼直接使用#include "public.h"

產生問題

使用的編譯構建系統如何來識別這些編譯哪一個目錄下的文件,在連接的時候如何選擇庫linux

不一樣的編譯系統下的解決

直接Makefile

經過宏來區分c++

ifdef WIN32
    SOURCES += $(wildcard os/win/*.cpp)
else
    SOURCES += $(wildcard os/linux/*.cpp)
endif

cmake

cmake經過邏輯語句和預約義變量來斷定windows

if(WIN32)
    aux_source_directory(os/win SOURCES)
else(APPLE)
    aux_source_directory(os/mac SOURCES)
else(UNIX)
    aux_source_directory(os/linux SOURCES)
endif(WIN32)

qmake

qt的.pro文件支持直接以debug

!unix {
    SOURCES += comm.cpp
}
win32:debug {
    TARGET = client_debug.exe
}
win32 | macx {
    HEADERS += debug.h
}
linux-g++ {
    CONFIGS += c++11
}

的方式來定義跨平臺代碼。unix

相關文章
相關標籤/搜索