在Makefile.in
中,我看到变量定义,其中外部变量名称包含在两个@
符号之间
# @configure_input@
package = @PACKAGE_NAME@
那些外部变量来自哪里?另外,我在GNU手册中找不到在两个@
符号之间准确包含变量的含义是什么意思?它是Makefile.in特有的东西吗?
谢谢。
答案 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定义。