更改系统标头路径和自定义标头文件

时间:2010-10-18 04:45:06

标签: c

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目录是一个好主意吗?

非常感谢任何建议,

2 个答案:

答案 0 :(得分:1)

我会单独保留标题 - 更改它们可能容易出错并且非常耗时,尤其是如果您想在某个时候更新log4c的版本。

我是否理解/usr/include/log4c中的project_name/tools/log4c/inc内的相同标头也在您的project_name/tools/log4c/inc/log4c目录中?如果是,请将它们移至gcc,然后使用-I标记向gcc -I project_name/tools/log4c/inc myprog.c etc etc 命令行添加包含路径:

log4c/inc/log4c

我们正在将文件移至<log4c/logging_event.h>,以便log4c仍然可以在log4c/inc/下的-L目录中匹配。

编辑:我最初将-I标记为标记,该标记设置了库搜索路径,而不是包含文件搜索路径。 {{1}}是此案例的正确标志。

答案 1 :(得分: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