Makefile.in和变量替换

Makefile.in和变量替换,makefile,autoconf,automake,Makefile,Autoconf,Automake,在Makefile.In中,我看到了变量定义,其中外部变量名包含在两个@符号之间 # @configure_input@ package = @PACKAGE_NAME@ 这些外部变量来自哪里?此外,我在GNU手册中找不到将变量包含在两个@符号之间的确切含义是什么?它是Makefile.in的特定内容吗 多谢各位 (我不是专家,但)是的,它们特定于Makefile.in,并在组装Makefile时替换它们,请参阅。例如,@PACKAGE\u NAME@是由定义的。这是一个自动功能 当/con

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

# @configure_input@

package = @PACKAGE_NAME@
这些外部变量来自哪里?此外,我在GNU手册中找不到将变量包含在两个
@
符号之间的确切含义是什么?它是Makefile.in的特定内容吗


多谢各位

(我不是专家,但)是的,它们特定于Makefile.in,并在组装
Makefile
时替换它们,请参阅。例如,
@PACKAGE\u NAME@
是由定义的。

这是一个自动功能

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

AC\u CONFIG\u文件中声明的任何内容都由
CONFIG.status
处理,通常通过将
foo.in
转换为
foo


当automake将
Makefile.am
处理为
Makefile.in
时,任何
AC_SUBST
变量都会自动可用(使用类似
FOO=@FOO
的声明),除非调用
am_SUBST\u NOTMAKE
也会读取(并给他那个复选标记).问题中的
PACKAGE\u NAME
如何?在我的
Makefile.am
中,我使用了
@datadir@/@package\u name@
,它被替换为
${datarootdir}/@package\u name@
,这显然是不正确的。
package\u name
是特殊的-它是由
AC\u INIT
设置的,正如蒂沃在下面提到的。