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
设置的,正如蒂沃在下面提到的。