假设我正在用C语言编写一个小型库,其中大部分源代码位于两个文件夹src/A和中src/B,并且头文件src/A/a.h需要包含在其中src/B/b.h。当为非库项目编写代码时,我通常会这样写
#include "B/b.h"
Run Code Online (Sandbox Code Playgroud)
ina.h并使用该-Isrc标志告诉编译器在哪里查找头文件。
现在假设我的库安装在本地,~/mylib并且我想使用来自a.h不同项目的函数。只需使用该文件即可包含该文件
#include "~/mylib/src/A/a.h"
Run Code Online (Sandbox Code Playgroud)
不起作用,因为~/mylib/src/B/b.h可能不属于搜索路径。我的问题是关于解决这个问题的规范方法。这可能很基础,但我没有用C语言做过任何高级编程,并且在网上尝试找到解决方案时也没有成功。
我想到的可能的解决方案如下:
添加~/mylib到搜索路径,但如果库和客户端项目具有相同名称的头文件(例如src/helpers.h),则可能会导致问题。是否可以包含一个头文件,而不用我不需要的文件使搜索空间变得混乱?
在库头文件中使用相对路径,但这感觉不太健壮。
谢谢。
正常的方法是专门为构成库的公共接口的标头建立一个单独的目录。通常这个目录被称为“include”。
然后,您可以将库的公共标头放置在库特定的目录下,即“mylib/include/mylib/bh”。如果您使用其他也有“bh”的库,这个额外的“mylib”目录可以防止冲突。如果您愿意,您还可以将其他不构成库的公共接口的私有标头保留在“src”目录下,以阻止它们暴露给库的用户。
这意味着该库的用户可以使用“-I mylib/include”来包含该目录,并包含各个文件,例如“#include“mylib/bh”。