我有一些.h文件如下(在Linux上)
Source/Server/connect.h
Source/Server/message.h
...
我正在开发另一个需要两个.h文件但位于不同目录的应用程序
Source/App2/..
我如何在app2应用程序中包含connect.h文件,考虑到我使用perforce并且其他所有在应用程序上工作的人都有自己的副本,因此添加包含库的绝对路径可能不是一个好主意但是我不确定。
编辑: 我使用专有的构建机制来构建代码,因此无法直接指定gcc选项。
答案 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)
您可以更改上面的编译器指令,或修改代码中的路径(相对或绝对路径)。
我建议您考虑所有项目的标题和目标文件(和库)的最佳位置并进行设置。
如果您有标准的包含和库位置,那么您将简化开发