在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定义。