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/inc
和tools/lib
的开发相同的目录结构。
但是,它无法编译,因为我没有在目标机器上安装log4c,因此log4c的系统路径不存在。但是,不希望目标计算机的用户安装log4c。一切都应该开箱即用。
所以我认为最好是编辑所有标题。从这个:
#include <log4c/logging_event.h>
到
#include "logging_event.h"
所有标题都在inc目录中,因此我不会使用系统路径。
我的问题是,将所有标题放入单个目录并编辑它们以指向此单个inc目录是一个好主意吗?
非常感谢任何建议,
答案 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