簡體   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