我的库在我构建之后创建的.h文件中有结构定义..但我在相应的.h.in中找不到这些。有人能告诉我这一切是如何工作的以及从哪里获得额外的信息?
具体来说:我正在构建用户空间线程库pth。它有pth_p.h.in,它不包含我正在寻找的结构定义,但是当我构建库时,会出现一个pth_p.h并且它具有我需要的定义。
事实上,我在构建之前搜索了库中的每个文件,但无法找到生成结构定义的位置。
答案 0 :(得分:2)
Pth使用GNU Autoconf,Automake和Libtool。通过运行./configure
,您将运行一个shell脚本,该脚本最终运行m4以检测是否存在大量不同的系统属性,并对许多文件进行更改。
看起来归结为./configure
从Makefile
生成Makefile.in
,然后通过make运行触发shtool
子命令scpp
的内容:
pth_p.h: $(S)pth_p.h.in
$(SHTOOL) scpp -o pth_p.h -t $(S)pth_p.h.in -Dcpp -Cintern -M '==#==' $(HSRCS)
模糊链接,但这里是shtool-scpp manpage,将其描述为:
此命令是另一个ANSI C 用于共享的源文件预处理器 cpp(1)代码段,内部 变量和内部函数。该 这意味着来自写作 ANSI C中的库。这里有一个常见的 通常是共享内部头文件 用于在之间共享信息 库源文件。
操作是解析特殊的 在文件中构造,生成一些 这些结构中的东西和 将它们插入tfile中的位置标记 通过将输出写入ofile。 此外,文件永远不会 触及或修改。而是 稍后将删除构造 cpp(1)构建过程的阶段。该 唯一的先决条件是每个文件 有一个``#include“”ofile“”“'' 顶部。
答案 1 :(得分:0)
.h.in可能在configure(从configure.ac生成)脚本中处理,请注意
AC_CONFIG_FILES([thatfile.h])
它将@VAR@
文件中.in
形式的变量替换为其值。
编辑:注意如果我是对的,你应该重新提出问题