包括来自不同应用程序/目录的.h文件

时间:2009-12-04 21:26:49

标签: c++ linux include

我有一些.h文件如下(在Linux上)

Source/Server/connect.h
Source/Server/message.h
...

我正在开发另一个需要两个.h文件但位于不同目录的应用程序

Source/App2/..

我如何在app2应用程序中包含connect.h文件,考虑到我使用perforce并且其他所有在应用程序上工作的人都有自己的副本,因此添加包含库的绝对路径可能不是一个好主意但是我不确定。

编辑: 我使用专有的构建机制来构建代码,因此无法直接指定gcc选项。

5 个答案:

答案 0 :(得分:15)

您可以#include文件的相对路径:

#include "../Server/connect.h"

或者你可以添加一个标志来告诉编译器查看另一个目录。对于gcc,您可以使用-I../Server;对于Visual C ++,您可以使用/I"../Server";其他编译器,我敢肯定,为此目的有自己的标志。

我认为第二种情况在大多数情况下更好,因为它允许您移动项目,而只需要在一个地方修改包含路径(makefile或属性表)。

答案 1 :(得分:3)

如果在编译器中添加包含搜索路径,gcc就是-I switch。

答案 2 :(得分:2)

我建议从#include语句中删除路径。正如其他人所说,将路径放入编译器的参数中。解决makefile中的路径差异或使用环境变量(可能需要同时执行这两个操作)。

我的经验是文件会移动。任何不使用相对路径的东西都会破坏构建(这是非常糟糕的)。

答案 3 :(得分:1)

另外静态相对路径,你也可以玩预处理器chicanery。我在Adobe看到的用于跨平台代码的一种技术是做类似的事情:

/* globalplatform.h */
#ifdef MAC
#define PLATFORM "../Platform/Mac/MacPlatform.h"
/* custom standard IO etc */
#define STDIO "../Platform/Mac/io/stdio.h"
#define CTYPE "../Platform/Mac/io/ctype.h"
#endif
#ifdef WIN32
#define PLATFORM "../Platform/Win/WinPlatform.h"
#define STDIO <stdio.h>
#define CTYPE <ctype.h>
#endif
/* etc */
#ifndef PLATFORM
#error undefined PLATFORM
#endif

/* some C file */
#include "globalplatform.h"
#include PLATFORM
#include STDIO
/* don't need CTYPE, no penalty */

虽然平台问题不是您的问题,但如果您愿意,可以根据构建配置定义相对路径,并且配置更改发生在一个地方而不是很多,而客户端文件只会提供他们需要的内容。缺点是您用于浏览头文件(右键单击等)的任何工具都是软管。

答案 4 :(得分:0)

您可以更改上面的编译器指令,或修改代码中的路径(相对或绝对路径)。

我建议您考虑所有项目的标题和目标文件(和库)的最佳位置并进行设置。

如果您有标准的包含和库位置,那么您将简化开发