是否更好的做法是包括" flint.h"或" flint / flint.h"

时间:2014-10-20 15:11:29

标签: c++ c header-files include-path subdirectory

Flint库将所有标头放入$PREFIX/include/flint/。然后Arb库包含Flint标头。对于Arb来说,这两者中的哪一个更好地包含它们:

  1. #include "flint.h"
  2. #include "flint/flint.h"
  3. 优点/缺点:

    如果Arb和Flint安装在/usr/include中(例如在Debian中),那么使用2.,用户不需要做任何事情,但是使用1.,用户需要使用{{1} }。

    所以2.的优点是使用Arb库的用户只需要为所有需要的库指定-I/usr/include/flint的包含路径(-I)。使用1.,必须包含路径$PREFIX/include,因此看起来更有效。

2 个答案:

答案 0 :(得分:4)

始终使用相对于/usr/include的路径。这样,您的代码将在大多数UNIX系统上开箱即用,并避免名称冲突(想想标题util.h)。

只要您的项目需要移植到较少开发人员友好的平台(主要是Windows),您的构建系统就需要确定依赖项的位置并设置相应的编译器开关。

答案 1 :(得分:2)

库的开发人员倾向于将A类放入头文件A.h.如果您使用两个碰巧具有相同名称的类的库,则可能会包含来自错误库的标头,具体取决于通过-I传递的包含目录的顺序。它有时会发生。 C ++命名空间机制在这里没有帮助。这样做:

#include "x/A.h"

而不仅仅是

#include "A.h"

可以帮助您避免这种名称冲突并确保包含来自x库的A.h,而不是例如来自y库。