2012-11-17 72 views
4

我正在开发C++头文件库,我们称之为PROJ。当一个库头包括另一个,它使用:在包含文件名中使用项目目录

#include <proj/foo.h> 

和编译器(gcc和铛)具有-I path-to-proj-parent。图书馆的用户还应在其包含的搜索路径中包含父项PROJ

我合理使用这一方案是安装这个库到proj子目录默认seachable父(/usr/include/proj/usr/local/include/proj)后,库用户不需要指定-I选项。

这个方案有没有缺点?正在使用<foo.h>而没有proj/前缀是比较常规和推荐的方式?

问题不在于是否在子目录中安装(将有proj子目录),而是如何引用包含文件。

+1

通过示例验证:'#include ' –

+0

@MatthieuM。 - 如果是答案,我会接受你的答案。 –

+0

我得稍微改进一下,答案很短;) –

回答

3

如果你看一下提升,你会注意到他们使用了类似的方案:。

#include <boost/shared_ptr.hpp> 

它具有防止冲突与其他依赖另一个同样命名文件的优势。

然而,在提升的情况下,他们把它一步。如果你有<x/y/z.hpp>,那么你很可能会被处理一个e实体名为::x::y::z(无论是函数还是类)。也就是说,项目中的目录布局模仿命名空间组织。定位自己真的很整齐。

通常情况下,大部分项目都是在子目录(和子命名)藏匿,但最常用的人拉入boost命名空间的便利,因此,他们有直接的boost文件夹活头。还有一些便利标题(其工作仅仅是收集一小撮其他标题以便一次将它们全部拉出)。

你可能最终注意到,如果你开一个头文件,比包括警卫,他们使用遵循the exact same hierarchy

#ifndef BOOST_SHARED_PTR_HPP_INCLUDED 

再次,因为它有助于避免冲突,因为它是后很文件,它是在有命名在整个Boost项目中(在区分大小写的文件系统上),只能有一个。

2

如果您在安装时创建了proj目录,则可以在路径中使用proj。事实上,它是防止与其他包含文件名称冲突的好方法。

的名字不应该是通用的,如“凸出”,虽然它应该是具体到项目

相关问题