如何命名 C++ header 文件?

How to namespace C++ header files?

我使用不同库的代码,这些库使用 defines.h 这样的名称。这不仅会导致相同文件名的冲突,还会造成混淆。 defines.h include 来自哪个库?

包含为 #include <library/defines.h> 将是一个干净的解决方案,但是包含路径需要是库的 parent 目录,这又是相当不干净的。 有什么方法可以为包含路径设置别名,以便 -I/path/to/library 使 headers 在 library/headername.h 下可用?

Is there some way to alias the include path, so that -I/path/to/library makes the headers available under library/headername.h?

在这种情况下似乎没有必要。您可以简单地使用 -I/path/to 这使得 /path/to/library/headername.hlibrary/headername.h.

下可用

就是说,虽然没有这样的编译选项(据我所知),但您可以为大多数文件系统中的文件路径创建这样的 "aliases"。这些别名称为符号 links。在这种情况下,你可以创建一个指向 . 的 link /path/to/library/mylibrary ,这将使 /path/to/library/headername.hmylibrary/headername.h 下可用,假设你已经使用 -I/path/to/library.

至少在 unixy 系统上,当你编译和 安装 一个库时,头文件被安装到

/usr/lib/libraryname/*.h

或者类似

/opt/libraryname-1.2/include/libraryname/*.h

然后如果有必要(不安装到编译器的默认包含搜索路径),右目录添加编译器选项,例如 gcc 选项

-I/opt/libraryname-1.2/include

然后总是在源代码中这样做,相信构建系统包含正确的搜索路径:

#include <libraryname/includefile.h>