[英]Problems including header file from different directory [not a path issue]
[英]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.