Makefile.in和变量替换



Makefile.in中,我看到了变量定义,其中外部变量名被括在两个@符号之间

# @configure_input@
package = @PACKAGE_NAME@

这些外部变量来自哪里?此外,我在GNU手册中找不到将变量封装在两个@符号之间到底意味着什么?它是Makefile.in特有的吗?

谢谢。

这是一个自动配置的东西。

./configure完成运行时,它生成并执行一个名为config.status的文件,该文件是一个shell脚本,具有变量替换的最终值(用AC_SUBST声明的任何值)。

AC_CONFIG_FILES中声明的任何内容都由config.status处理,通常是通过将foo.in转换为foo

当automake将Makefile.am处理为Makefile.in时,任何AC_SUBST变量都会自动变为可用(使用类似FOO = @FOO@的声明),除非通过调用AM_SUBST_NOTMAKE来抑制它。

(我不是专家,但)是的,它们是Makefile.in特有的,configure在组装Makefile时会替换它们,请参阅Autoconf手册第4.8节。例如,@PACKAGE_NAME@由AC_INIT定义。

最新更新