2017-09-05 32 views
0

我正在使用linux binutils-2.29。 在父目录中没有Makefile.am,但在所有子目录中都有Makefile.amMakefile.def vs Makefile.am

在父目录中的这些是生成文件存在:

Makefile Makefile.def Makefile.in Makefile.tpl 

在侧Makefile.tpl有它说MakefileMakefile.tpl产生由autogen Makefile.def

但内部子目录没有Makefile.def注释,当我运行autoreconf && automake它生成MakefileMakefile.am

什么Makefile.defMakefile.am之间的区别究竟是什么?

回答

1

Makefile.def和Makefile.am的区别是什么?

让我们来看看GCC,也是使用binutils的大型项目。引用Regenerating GCC Configuration

的Makefile.in文件有时大,并且可以由automake从Makefile.am文件产生。一些Makefile.in文件(用于在构建树中生成Makefile)由Makefile.tpl和Makefile.def文件中的autogen生成。 Autogen是一个(GUILE脚本)工具,旨在简化包含大量重复文本的程序的创建和维护。

所以区别在于如何以及在哪里存储autogen将要工作的部分输入文件。在GCC的情况下,它Makefile.tpl存储模板(用于产生输出生成文件,而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; }; 
// ...