我在Linux Binutils-2.29上工作。在父目录中没有Makefile.am
,但是在所有子目录中都有Makefile.am
。
在父级目录中,这些是存在的makefiles:
Makefile Makefile.def Makefile.in Makefile.tpl
在Makefile.tpl
侧面有一个评论,该评论说Makefile
是由Makefile.tpl
生成的autogen Makefile.def
但是在子目录中没有Makefile.def
,当我运行autoreconf && automake
时,它会从Makefile.am
Makefile
Makefile.def
和Makefile.am
之间的区别到底是什么?
makefile.def和makefile.am?
到底有什么区别
让我们看一下使用binutils
的大型项目GCC。引用再生GCC配置:
makefile.in文件有时很大,可以通过makefile.am文件产生自动化。Autogen从makefile.tpl和makefile.def文件中生成了一些makefile.in文件(用于在构建树中生成makefile)。Autogen是一种(狡猾的脚本)工具,旨在简化包含大量重复文本的程序的创建和维护。
因此,区别实际上是关于要存储autogen
可以使用的输入文件的部分和地点。如果是GCC,则Makefile.tpl
存储A 模板(用于生成输出MakeFile,而Makefile.def
商店定义将由Autogen使用。
例如,在Makefile.tpl
内部,您会找到用于填充HOST_LIB_PATH
变量的模板(请注意,它使用host_modules
变量):
# This is the list of directories that may be needed in RPATH_ENVVAR
# so that programs built for the host machine work.
HOST_LIB_PATH = [+ FOR host_modules +][+
IF lib_path +]$(HOST_LIB_PATH_[+module+])[+ ENDIF lib_path +][+
ENDFOR host_modules +]
和Makefile.def
内部有一个host_modules
的定义:
host_modules= { module= bfd; bootstrap=true; };
host_modules= { module= opcodes; bootstrap=true; };
// ...