[英]Create a library with compile-time options
我正在用C ++創建游戲制作庫。 我使用SDL2 / OpenGL進行渲染。 我已經實現了大量的助手和非常基本的類,例如無單位角度,向量(實數,不是STL的動態數組),等等。
現在,我認為如果在編譯時定義宏允許使用ncurses而不是SDL,那將很酷。 唯一的問題是,雖然在.cpp文件中使用#ifdef USE_NCURSES
對此非常理想,但在某些情況下,我也希望能夠在頭文件中使用此功能。
由於不編譯頭文件,因此最終用戶使用lib時將對頭中的任何#ifdef
進行預處理,而不是編譯lib時。
我試圖找到一些解決方法,例如:
我該怎么辦?
由於不編譯頭文件,因此最終用戶使用lib時將對頭中的任何#ifdef進行預處理,而不是編譯lib時。
我明白了您的意思,但是您的措詞方式可能會有誤解。 頭文件被編譯,最終用戶與預處理器無關...但是的確,在生成lib二進制文件很長時間之后,頭文件的副本將被編譯,最終程序員將構建lib。進入他們的應用
但是,這是雙向的:標頭也被編譯到庫二進制文件中,並且這在最終程序員到達它附近的任何地方很長時間之前就發生了,所以要在您做出選擇之前很長時間。
根本沒有辦法部署預處理器來完成此任務。 但是,無需“復制並粘貼整個項目”。 任何明智的構建系統都可以根據構建設置推出項目的兩個變體 。
我會將您的庫拆分為單獨的模塊,並讓您的應用程序在運行時鏈接您想要的模塊(以及包含所有“公共” /基本邏輯的模塊)。
因此,您最終的程序員的build命令將類似於:
g++ theirApp.cpp -lyourLib-common -lyourLib-sdl
或類似:
g++ theirApp.cpp -lyourLib-common -lyourLib-ncurses
您可以使用封裝和職責分離的所有正常原則來使之正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.