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