我正试图向Autotools提供一个config.h.in
。该主题在4.8.1配置头模板的Autoconf手册中进行了介绍。config.h.in
看起来是这样的:
/// \file config.h
/// \brief Library configuration file
#ifndef CRYPTOPP_CONFIG_H
#define CRYPTOPP_CONFIG_H
// define this if running on a big-endian CPU
#undef CRYPTOPP_BIG_ENDIAN
// define this if running on a little-endian CPU
#undef CRYPTOPP_LITTLE_ENDIAN
#endif // CRYPTOPP_CONFIG_H
我们的configure.ac
包括用于测试的以下内容:
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([Makefile] [libcryptopp.pc])
AC_CONFIG_SRCDIR([configure.ac])
AC_PROG_LIBTOOL
LT_INIT
AC_PROG_CXX
AC_LANG([C++])
AC_PROG_GREP
在autoreconf
和configure
运行之后,就会有一个config.h
。问题是,它没有遵循模板config.h.in
。它看起来像是由这些工具产生的新的config.h
。
当我检查config.log
时,我只看到一次提到config.h
。我找不到更多关于正在发生的事情的信息:
config.status:1172: creating Makefile
config.status:1172: creating libcryptopp.pc
config.status:1172: creating config.h
config.status:1401: executing depfiles commands
config.status:1401: executing libtool commands
有什么问题,我该如何解决?
发布于 2018-01-25 08:33:57
在
autoreconf
和configure
运行之后,就会有一个config.h
。问题是,它没有遵循模板config.h.in
。它看起来像是由这些工具产生的新的config.h
。
在这一点上,看看你的config.h.in
。我想你会很惊讶的。
问题是,在autoreconf
为您运行的程序中,有一个是autoheader
,它根据在configure.ac
(或configure.in
)中找到的内容构建config.h.in
。然后,后续的configure
使用新的模板,但是配置日志中并没有特别记录到这一点,因为模板在那时已经存在了。
这种行为通常是一种受欢迎的便利,但是如果您想提供您自己的定制config.h
模板,则必须避免在运行autoreconf
(或直接运行autoheader
时)替换它。这样做的一种方法是完全避免运行这些程序。您可以运行其他自动工具程序,如果您决定避免使用autoreconf
,那么编写脚本可能是值得的。
另一方面,Autoconf附带了一些内置的“行为”。特别是,AH_TOP
和AH_BOTTOM
对于将自定义内容添加到自动生成的内容中可能很有用。
第三,如果您希望提供严格手工编写的自己的模板,并避免autoheader
乱七八糟,那么了解autoheader
只使用configure.ac
中命名的第一个标头模板是有用的,并且可以指定多个标题模板。因此,您可以添加一个源没有引用的虚拟配置头,这样autoheader
就可以在不破坏任何东西的情况下处理它:
AC_CONFIG_HEADERS([config_dummy.h config.h])
Autotools将为其创建虚拟配置头和模板,但如果您的源从未引用过它,则对构建没有任何影响。
https://stackoverflow.com/questions/48436715
复制相似问题