LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 734|回复: 8

关于#include

[复制链接]
发表于 2004-12-9 10:53:36 | 显示全部楼层 |阅读模式
有些源文件或头文件用#include "header.h",可是"header.h"不是系统的inlude文件,也不在当前目录,而是同一个project的文件(来自同一个tar ball)。
是否是通过Makefile让编译器找到了"header.h"?如果是,怎么在Makefile里实现?
发表于 2004-12-9 11:36:13 | 显示全部楼层
既然是一个tar包里面,直接include相对路径不就可以了
发表于 2004-12-9 19:45:31 | 显示全部楼层
通过给编译器参数解决啊
-I /path/to/your/dir
当然可以写到Makefile里面了
 楼主| 发表于 2004-12-10 10:38:12 | 显示全部楼层
你没有看清我的帖子。源文件里用的是include "header.h",根本没给相对路径。不然会有什么疑问?

最初由 yangtou 发表
既然是一个tar包里面,直接include相对路径不就可以了
 楼主| 发表于 2004-12-10 10:39:45 | 显示全部楼层
这么作的意义何在?
我自己觉得在源文件里用相对路径比在makefile里写-I参数方便,尤其当文件很多的时候。

最初由 czopp 发表
通过给编译器参数解决啊
-I /path/to/your/dir
当然可以写到Makefile里面了
发表于 2004-12-10 18:02:38 | 显示全部楼层
我觉得你不放看看linux下面的某些应用程序的源码。
就拿evolution来说吧,他有很多的界面相关的代码,同时这些界面代码一定会用到底层的数据结构,而底层的数据结构当然是同一个project里面的不同目录。

他的做法是不写相对路径“”,而写库路径<>,然后将-I写入到Makefile中(当然这个可能是autotools做的,但只需要修改配置文件)

当一个项目分为多个模块,各模块分别编译或者编译成动态库,模块之间包含头文件的话,上面的做法当然是最好不过了。
发表于 2004-12-11 23:06:15 | 显示全部楼层
我只知道一些工具,如 yacc 和 bison,可以将特定类型的源文件编译成 C 语言的程序文件。在这个过程中,可以指示这些程序产生头文件。这样您就可以写一些看似不存在的头文件了。
 楼主| 发表于 2004-12-13 16:30:56 | 显示全部楼层
倒不是那些头文件不存在。它们不在引用它们的文件的当前目录,而是在工程下别的目录。

最初由 herberteuler 发表
我只知道一些工具,如 yacc 和 bison,可以将特定类型的源文件编译成 C 语言的程序文件。在这个过程中,可以指示这些程序产生头文件。这样您就可以写一些看似不存在的头文件了。
 楼主| 发表于 2004-12-13 16:32:31 | 显示全部楼层
我所遇到的问题,引用头文件的那些文件开头,用的不是#include<>,而是#include"",所以我觉得比较奇怪

最初由 czopp 发表
我觉得你不放看看linux下面的某些应用程序的源码。
就拿evolution来说吧,他有很多的界面相关的代码,同时这些界面代码一定会用到底层的数据结构,而底层的数据结构当然是同一个project里面的不同目录。

他的做法是不写相对路径“”,而写库路径<>,然后将-I写入到Makefile中(当然这个可能是autotools做的,但只需要修改配置文件)

当一个项目分为多个模块,各模块分别编译或者编译成动态库,模块之间包含头文件的话,上面的做法当然是最好不过了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表