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