【发布时间】:2015-06-17 18:43:14
【问题描述】:
我知道可以将#include 文件路径指定为相对于文件所在目录的绝对文件路径,或者相对于$PATH 系统变量中的任何目录。有没有办法在编译程序时相对于用户的当前目录指定它?假设我有以下文件结构:
|--dir_a/
| |--a.c
| |--a.h
|--dir_b/
| |--b.c
| |--b.h
|--makefile
现在假设我想 #include 来自 dir_b/b.h 的文件 dir_a/a.h。使用dir_b/b.h的位置,可以这样写:
#include ../dir_a/a.h
但是,在我看来,这种方法有一个重大缺陷,因为它硬编码了文件相对于彼此的位置,这意味着重新定位文件需要在包含该文件的所有位置更新文件路径。
使用绝对文件路径可以避免这个问题,而是硬编码项目在文件系统中的位置,这似乎是一种不好的做法。
最后,使用<> 标记来指定文件路径也不可行,因为我不能假设该项目将列在$PATH 变量中。
所以我想要做的是能够指定相对于用户编译的路径(或者更好的是,从 makefile 的位置)。在上面的示例中,这将让我使用以下语句从dir_b/b.h 到#include dir_a/a.h:
#include dir_a/a.h
我认为这将是理想的解决方案。这将使#include 语句更加一致且更易于遵循,并避免我上面列出的缺点。是否有可能以任何方式做到这一点,例如。带有编译器标志或其他东西?我使用gcc 作为我的编译器。
【问题讨论】:
-
$PATH与此无关。使用-I。 -
这看起来很有希望。我将如何使用它来指定项目的根目录?
-
使用
#include "path/to/file.h"代替#include <file.h>? -
谢谢。这帮助我解决了问题。