Make是类Unix系统提供的一个工具程序(Utility Software),属于GUN toolchain中的一员。用于编译和自动化构建产品,尤其适用于大规模的系统工程。
与Shell类型(shell命令解释器和shell语言),GNU make由make工具和makefile两部分构成。make是一个命令工具,它解释makefile中的语法规则。makefile有自己的书写格式、关键字和函数,这个文件告诉make以何种方式编译源代码和链接程序。
make在解释makefile时,不是简单地重新进行编译、链接。能够针对修改的源文件,自动完成源文件对应.o文件的更新、库文件的更新、可执行文件的更新。如果make判断“文件时间戳”晚于上次编译时的“时间戳”,就表明次文件在上次编译之后重新被修改过,需要重新编译;如果时间戳同上次一样没有变化,就不需要重新编译。
makefile定义了文件的依赖关系,在大规模的系统工程中,源文件成千上万,文件间通常彼此依赖且关系复杂,如果用户修改了一个其他文件依赖的文件,则必须重新编译所有的文件,工作量巨大。makefile文件中规定了这些依赖关系,指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译等等。用户只需要输入make命令,整个工程完全自动编译。
许多现代软件的开发中,集成开发环境已经取代make(Windows的IDE本身有自动化构建的功能),也有自动生成makefile文件的工具(Cmake等)。但是在Unix环境中,仍然有工程采用make来协助软件开发。