C++ 如何包括C++;未使用';而与当前源文件不在同一目录中的头文件';?

C++ 如何包括C++;未使用';而与当前源文件不在同一目录中的头文件';?,c++,C++,例如: 项目/公用事业/a.cpp 及 项目/公用事业/人工湿地 是此项目中到处使用的一批函数的实现文件和头文件 现在,想象一下 项目/组成部分/b.h 希望包括a.h。常见的解决方案是使用: #包括“./utility/a.h” 在b.h中 但这是不允许的: 所有项目的头文件都应列为项目源目录的子目录,而不使用UNIX目录快捷方式(当前目录)或。(父目录) 我试图将其包括在上面的文档中,但它不起作用 那么在不使用“.”或“…”的情况下,我应该如何包含它呢? 那么在不使用“.”或“…”的情况下,

例如:

项目/公用事业/a.cpp

项目/公用事业/人工湿地

是此项目中到处使用的一批函数的实现文件和头文件

现在,想象一下

项目/组成部分/b.h

希望包括
a.h
。常见的解决方案是使用:

#包括“./utility/a.h”

b.h

但这是不允许的:

所有项目的头文件都应列为项目源目录的子目录,而不使用UNIX目录快捷方式
(当前目录)或
(父目录)

我试图将其包括在上面的文档中,但它不起作用

那么在不使用“.”或“…”的情况下,我应该如何包含它呢?

那么在不使用“.”或“…”的情况下,我应该如何包含它呢?


您可以使用编译器的
-I
选项指定顶部include目录的路径

那么在不使用“.”或“…”的情况下,我应该如何包含它呢?


您可以使用编译器的
-I
选项指定顶部include目录的路径。

另请参见和

您需要决定是否只使用头文件的基本名称(
a.h
,在您的问题的缩写示例中),还是使用子目录加头文件名
project/a.h
)。只要标题名是唯一的,这两种方法都是可行的;通常,子目录版本通常更好,并且需要更少的命令行选项

你可以写:

#ifndef B_H_INCLUDED
#define B_H_INCLUDED

#include "utility/a.h"

…other material required…

#endif /* B_H_INCLUDED */
然后,在编译器命令行中,包括一个选项:

-I ..
这确保编译器将
实用程序/a.h
作为
。/utility/a.h
(除非在某些地方存在名称冲突)。或者,您可以指定项目的绝对路径:

-I /path/to/project
将读取
/path/to/project/utility/a.h

另请参见和

您需要决定是否只使用头文件的基本名称(
a.h
,在您的问题的缩写示例中),还是使用子目录加头文件名
project/a.h
)。只要标题名是唯一的,这两种方法都是可行的;通常,子目录版本通常更好,并且需要更少的命令行选项

你可以写:

#ifndef B_H_INCLUDED
#define B_H_INCLUDED

#include "utility/a.h"

…other material required…

#endif /* B_H_INCLUDED */
然后,在编译器命令行中,包括一个选项:

-I ..
这确保编译器将
实用程序/a.h
作为
。/utility/a.h
(除非在某些地方存在名称冲突)。或者,您可以指定项目的绝对路径:

-I /path/to/project

它将读取
/path/to/project/utility/a.h

通常,您应该使用Makefile或更好的方法来使用automake。 因为您使用C++,所以make文件只将头路径添加到 CXXFLAGS变量

-----你的档案----- 生成文件:

CXXFLAGS += -I../utility
VPATH = ../utility

yourprog : b.o 
    $(CXX) $(CXXFLAGS) -o $@ $^ ../utility/a.o
在源文件中,您只需要

#include "a.h"

在Makefile中,最好还添加LDFLAGS。Makefile的此段仅显示相关部分。一个完整的Makefile有更多的代码行。I编译器选项告诉编译器在目录中查找herder文件。编译器可以有多个-I选项。这类似于unix中的PATH变量,其中您的搜索路径由“:”

分隔。通常,您应该使用Makefile或更好的方法来使用automake。 因为您使用C++,所以make文件只将头路径添加到 CXXFLAGS变量

-----你的档案----- 生成文件:

CXXFLAGS += -I../utility
VPATH = ../utility

yourprog : b.o 
    $(CXX) $(CXXFLAGS) -o $@ $^ ../utility/a.o
在源文件中,您只需要

#include "a.h"

在Makefile中,最好还添加LDFLAGS。Makefile的此段仅显示相关部分。一个完整的Makefile有更多的代码行。I编译器选项告诉编译器在目录中查找herder文件。编译器可以有多个-I选项。这类似于unix中的PATH变量,其中您的搜索路径由“:”

分隔。您可以使用编译器的
-I
选项指定指向顶部include目录的路径。非常感谢!这个方法太棒了。您可以使用编译器的
-I
选项指定到顶部include目录的路径。非常感谢!这个方法太棒了。。