C语言 Makefile.def vs Makefile.am



我在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.defMakefile.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; };
// ...

最新更新