gpt4 book ai didi

autotools - config.h.in 未被用作模板

转载 作者:行者123 更新时间:2023-12-02 15:02:57 28 4
gpt4 key购买 nike

我正在尝试向 Autotools 提供 config.h.in。该主题包含在 Autoconf 手册中,地址为 4.8.1 Configuration Header Templates . 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

autoreconfconfigure 运行后,有一个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

问题是什么,我该如何解决?

最佳答案

After autoreconf and configure runs, there is a config.h. The problem is, it does not follow the template config.h.in. It looks like a new config.h produced by the tools.

此时查看您的 config.h.in。我想你会感到惊讶。

问题是 autoreconf 为您运行的程序中有 autoheader ,它根据在 configure.ac(或 configure.in)中找到的内容构建 config.h.in >).您随后的 configure 会使用新模板,但配置日志中不会记录任何特别的内容,因为此时模板已经存在。

这种行为通常是一种受欢迎的便利,但如果您想提供自己的自定义 config.h 模板,则必须避免在运行 autoreconf 时替换它(或者当 autoheader 直接运行时)。一种方法是完全避免运行这些程序。您可以运行其他 autotools 程序,如果您决定避免使用 autoreconf,那么编写脚本可能是值得的。

另一方面,Autoconf 带有一些内置的 macros to modulate autoheader's behavior .特别是,AH_TOPAH_BOTTOM 可能对您将自定义内容添加到自动生成的内容很有用。

另一方面,如果你想提供自己的模板,严格手工编写,并避免 autoheader 弄乱它,那么知道 autoheader 仅适用于configure.ac 中指定的第一个 header 模板,您可以指定多个。因此,您可以添加一个您的源不引用的虚拟配置 header ,以便 autoheader 可以使用它而不会弄乱任何东西:

AC_CONFIG_HEADERS([config_dummy.h config.h])

Autotools 将为它创建虚拟配置 header 和模板,但如果您的源代码从未引用它,那么这对构建没有影响。

关于autotools - config.h.in 未被用作模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48436715/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com