Makefile.in和变量替换

时间:2012-07-25 05:59:02

标签: makefile autoconf automake

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

# @configure_input@

package = @PACKAGE_NAME@

那些外部变量来自哪里?另外,我在GNU手册中找不到在两个@符号之间准确包含变量的含义是什么意思?它是Makefile.in特有的东西吗?

谢谢。

2 个答案:

答案 0 :(得分:8)

这是一个autoconf的事情。

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

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

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

答案 1 :(得分:3)

(我不是专家,但是)是的,它们特定于Makefile.in,而configure在汇编Makefile时会替换它们,请参阅the Autoconf Manual, section 4.8。例如,@PACKAGE_NAME@AC_INIT定义。

相关问题