2013-04-15 43 views
2

我有幾個C源文件和頭文件。有些標題供公衆使用,有些供圖書館內部使用。我想將它們邏輯分隔到文件夾中,以便內部使用的標題不能與標題混合以供公共使用。右頭組織

這個簡單的任務是否有任何常用的模式?

+2

聽起來像你這樣做,通過思前想...'#包括「somepublic.h」'和'的#include的一個不錯的工作或'#include '或'#include '...我只是繼續擴展這個評論,我想我會做出回答 –

回答

1

這裏是一個典型的模式,它可能取決於你的編譯器是什麼提供給你......你有2種編譯過程中包括路徑:

  1. 用戶頭搜索路徑,用雙引號表示#include "header.h"標題名稱,這些通常僅用於您正在處理的項目;因爲你不會通過這種方式來處理庫標題。
  2. 系統頭搜索路徑,由尖括號表示#include <mylib/header.h>,這也可以用於你的圖書館...

讓我們來想象下面簡單的場景......

項目A依賴於庫一。

在lib_a我們有一個C文件和2頭...

lib_a.clib_a.hlib_a_internal.h

當你建立lib_a.c您使用以下包括:

#include "lib_a.h" 
#include "lib_a_internal.h" 
在生成腳本

,你會在你的系統某處lib_a.h複製到include/lib_a/lib_a.h不是你的真實系統頭標頭路(也許,但構建具體之一,這取決於你想如何原子和複雜的是。)
您也可能會複製你的lib_a.a(或.so.dyld,或.dll),以lib/lib_a.a其中lib通常高於include同行。

那麼當你建立一個項目使用下列內容:

#include <lib_a/lib_a.h> 
0

爲什麼不把它們放到單獨的目錄中並在構建過程中使用標誌來獲取相應的目錄?

0

將lib的源代碼留在內部頭文件中,並將頭文件將lib的外部API原型化爲/usr/include/<your lib's name without the prefix "lib">


Alternativly把外部頭以/usr/lib/<your lib's name without the prefix "lib">/include和鏈接/usr/include/<your lib's name without the prefix "lib">後者。

這使您可以在/usr/lib/<your lib's name without the prefix "lib">/include下將其他文件放置到lib中。例如etc中的配置設置,然後可以從/etc/<your lib's name without the prefix "lib">鏈接。

+0

我認爲這在開發圖書館時沒有多大意義。 (例如,'/ usr'中的文件不受版本控制。) – svick