2010-10-18 157 views
0
gcc 4.4.5 c89 

我最近在我的開發機器上下載並安裝了log4c。 我把所有的標題,幷包括在以下目錄中。更改系統標題路徑和自定義頭文件

project_name/tools/log4c/inc 
project_name/tools/log4c/libs 

然而,當我安裝了頭,其中在系統路徑:

/usr/include/log4c/*.h 

所以,在我的項目,當我包括layout.h。 layout.h將在這個系統路徑中包含以下頭文件。

#include <log4c/logging_event.h> 

我創建的目錄結構在目標機器上,因爲我做了我的發展tools/inctools/lib

但是,它不會編譯,因爲我沒有在目標機器上安裝log4c,因此log4c的系統路徑不存在。但是,目標機器的用戶不會期望安裝log4c。一切都應該開箱即用。

所以我認爲一個好主意是編輯所有標題。從這個:

#include <log4c/logging_event.h> 

#include "logging_event.h" 

的所有頭都在INC目錄,所以我不會使用系統路徑。

我的問題是,這是一個好主意,把所有的標題放到一個目錄中,並編輯它們以指向這個單一的inc目錄?

非常感謝任何建議,

回答

1

我要離開的頭獨自 - 改變它們是容易出錯且費時,特別是如果你想在某個時候更新你的log4c的版本。

我的理解是,/usr/include/log4c中的相同標題也位於您的project_name/tools/log4c/inc目錄中嗎?如果是這樣,將它們移動到project_name/tools/log4c/inc/log4c,並添加一個包含路徑使用-I標誌的gcc命令行:

gcc -I project_name/tools/log4c/inc myprog.c etc etc 

我們將文件移動到log4c/inc/log4c使<log4c/logging_event.h>仍然可以匹配的log4c目錄log4c/inc/下。

編輯:我原本打字-L作爲標誌,它設置庫搜索路徑,而不是包含文件搜索路徑。 -I是這種情況的正確標誌。

+0

的'-L'命令將目錄庫搜索路徑,它僅用於查找庫鏈接,而不是頭包含(見手冊頁http://linux.die.net/man/1/gcc) – 2010-10-27 22:45:55

+0

@Jesse:謝謝!我的意思是'-I'。更正答案。 – Jander 2010-10-28 12:38:18

1

它看起來像log4c庫帶有目錄結構

/src 
    /log4c.h 
    /log4c 
    /lots of *.h and *.c 

所以它的設計,包括它的頭文件作爲

#include <log4c.h> 

#include <log4c/logging_event.h> 

爲你做。這樣做是很重要的。相反,如果你只寫

#include <logging_event.h> 

和你發佈你的圖書館的人誰擁有不同logging_event.h,該文件可能會感到困惑,你可憐的用戶最終會包括錯誤的文件。

所以我建議堅持log4c使用的目錄結構。在你的情況下:

project_name/tools/log4c/inc/log4c/logging_event.h 

等(如@Jander建議)。加用gcc的include目錄的正確方法是-I

gcc -Iproject_name/tools/log4c/inc foo.c