Flint库将所有头放入$PREFIX/include/flint/
中。Arb库随后包含Flint标头。对于Arb来说,这两种方法中哪一种更好:
#include "flint.h"
#include "flint/flint.h"
优点/缺点:
如果Arb和Flint安装在/usr/include
中(例如在Debian中),那么对于2.,用户不必做任何事情,但是对于1.,用户需要使用-I/usr/include/flint
。
所以2的优点。使用Arb库的用户只需要为所有需要的库指定到$PREFIX/include
的包含路径(-I
)。对于1.,必须包含路径$PREFIX/include/flint
,因此似乎需要做更多的工作。
始终使用相对于/usr/include
的路径。这样,您的代码将在大多数UNIX系统上开箱即用,并且可以避免名称冲突(想想标题util.h
)。
一旦您的项目需要移植到开发人员不太友好的平台(主要是Windows),您的构建系统就需要确定依赖项的位置并设置适当的编译器开关。
库的开发人员倾向于将类a放入头文件a.h中。如果您使用两个碰巧具有相同名称的类的库,则可能会包含错误库的头,这取决于通过-I传递的include目录的顺序。这种情况有时确实会发生。C++命名空间机制在这里没有帮助。这么做:
#include "x/A.h"
而不仅仅是
#include "A.h"
可能有助于避免此类名称冲突,并确保包含x库中的A.h,而不是y库中的。