使用自动工具时,原始.h文件会怎样?

时间:2019-03-24 19:18:33

标签: c header-files autotools

我正在用C创建外壳。我创建的.tar.gz文件可以很好地工作。但是,当我解压缩该文件时,我在生成所述文件时使用的原始头文件将更改为包含自动工具使用的代码。有没有办法保留原始的.h文件?

作为参考,这是我的configure.ac:

AC_INIT([program_name], 1.0)  
AM_INIT_AUTOMAKE  
AC_PROG_CC  
AC_CONFIG_HEADERS([shell.h])  
AC_CONFIG_FILES(Makefile)  
AC_OUTPUT

Makefile.am程序为:

bin_PROGRAMS = shell  
shell_SOURCES = main.c functions.c

我希望当我使用shell.h时,我会看到我制作的原始#include和#define。但是,它只有典型的自动工具#define有关软件包和版本号的信息。

在此方面提供的任何帮助以及在此进行的实际操作将不胜感激,因此我不再赘述。

2 个答案:

答案 0 :(得分:1)

AC_CONFIG_HEADERSdocumentation)输出一个由Autoconf生成的头文件,其中包含有关包和用于编译该包的环境的信息。

通常,此文件名为config.h,但您似乎已将其命名为shell.h,它覆盖了您手动创建的另一个shell.h文件,我猜是吗?

如果是这种情况,解决方案是在AC_CONFIG_HEADERS中使用其他名称。

答案 1 :(得分:0)

正如@ptomato已经观察到的那样,AC_CONFIG_HEADERS用于请求configure脚本在运行时为您创建头文件,该脚本在其中定义了宏来传达已收集的各种信息,例如作为各种测试的结果。宏参数指定此生成文件应具有的名称。这是将所有信息传递到命令行上的编译命令的替代方法。它与命名源之间提供的头文件无关,并且肯定会导致替换任何此类头。如果您的源代码没有#include指定的标头,这也是没有用的。

尚不清楚是否要使用这样的配置头,但是如果shell.h是您提供的头,并且您不希望configure覆盖它,则不要将其名称指定为{{ 1}}。尽管我个人喜欢它,但您可能完全不需要AC_CONFIG_HEADERS,因为使用它使最终的AC_CONFIG_HEADERS输出更易于阅读。如果继续使用它,则需要选择其他名称(例如常规的make),并且需要 all 您的C源config.h的标头他们还有其他事情。

要通知Automake最终未安装的源中提供的标头,只需在至少一个目标的#include中列出它即可。 Automake知道不要尝试编译头文件,但是在您的源文件中列出它们可以确保它们被打包到通过_SOURCES生成的发行包中。还有其他选择,例如在make dist中列出此类标头,但它们不太常规。