.h从.h.in生成?

时间:2010-08-14 11:03:12

标签: header autoconf shtool

我的库在我构建之后创建的.h文件中有结构定义..但我在相应的.h.in中找不到这些。有人能告诉我这一切是如何工作的以及从哪里获得额外的信息?

具体来说:我正在构建用户空间线程库pth。它有pth_p.h.in,它不包含我正在寻找的结构定义,但是当我构建库时,会出现一个pth_p.h并且它具有我需要的定义。

事实上,我在构建之前搜索了库中的每个文件,但无法找到生成结构定义的位置。

2 个答案:

答案 0 :(得分:2)

Pth使用GNU AutoconfAutomakeLibtool。通过运行./configure,您将运行一个shell脚本,该脚本最终运行m4以检测是否存在大量不同的系统属性,并对许多文件进行更改。

看起来归结为./configureMakefile生成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形式的变量替换为其值。

编辑:注意如果我是对的,你应该重新提出问题