![](/img/trans.png)
[英]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.