我有几个C源文件和标题。一些标题供公众使用,一些标题供图书馆内部使用。我想将它们逻辑地分成文件夹,以便内部使用的标题不与标题混合供公众使用。
这项简单的任务是否有常用的模式?
答案 0 :(得分:1)
这是一个典型的模式,它可能取决于您的编译器可用的内容......编译期间有两种类型的包含路径:
#include "header.h"
标题名称表示,这些通常仅适用于您正在处理的项目;因为你不会以这种方式解决库标题。#include <mylib/header.h>
表示,也可以用于您的库...... 让我们想象以下简单的场景......
项目A取决于Lib A.
在lib_a中我们有一个c文件和2个标题...... lib_a.c
,lib_a.h
和lib_a_internal.h
当你构建lib_a.c时,你使用以下包括:
#include "lib_a.h"
#include "lib_a_internal.h"
在您的构建脚本中,您将lib_a.h
复制到系统标头路径中的include/lib_a/lib_a.h
(可能不在您的真实系统标头中,而是在特定于构建的标头中,具体取决于您想要的原子和复杂程度成为。)
您也可以将lib_a.a
(或.so
或.dyld
或.dll
)复制到lib/lib_a.a
lib
上面是include
的同行。
然后在构建项目A时使用以下内容:
#include <lib_a/lib_a.h>
答案 1 :(得分:0)
为什么不将它们放入单独的目录中并使用标志在构建期间获取适当的目录?
答案 2 :(得分:0)
将内部标题保留为lib的源代码,并将标题库的外部API原型设置为/usr/include/<your lib's name without the prefix "lib">
。
另外将外部标题添加到/usr/lib/<your lib's name without the prefix "lib">/include
并将/usr/include/<your lib's name without the prefix "lib">
链接到后者。
这允许您在/usr/lib/<your lib's name without the prefix "lib">/include
下向lib放置其他文件。例如etc
中的配置设置,然后可以从/etc/<your lib's name without the prefix "lib">
链接。