繁体   English   中英

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

[英]including .h file from a different application/directory

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

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

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

Source/App2/..

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

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

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

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

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

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

如何添加包含搜索路径到编译器,对于gcc它是-I开关。

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

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

除了静态相对路径,您还可以使用预处理器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 */

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM