GNU Make 负责处理 Makefile 文件,指导软件构建,通过循环访问指令,确定规则和目标输出。 Makefile 规则是一组统一命名的命令,各个命令一起执行创建输出文件,这个文件则称为目标输出文件(通常是库或可执行文件)。如果目标已经存在,而源代码还没有更新,make可以自动跳过不必要的构建步骤,减少编译时间。
Make 创建于 1976 年 4 月,其创始人为 Stuart Feldman。GNU 在 20 世纪 80 年代末发布了自由软件版本。现在,版本 3.56 仍然可以从 GNU FTP 服务器上获得(通过diffs),其历史可追溯到 1989 年 9 月 23 日。 目前的最新版本是 GNU Make 4.3,发布于 2020 年 1 月 19 日。
如果你使用的是 Linux 系统,make程序可能已内置。如果系统内并无make程序,可以使用以下命令进行安装:
Makefile 是指示GNU Make构建软件项目的主要方式。让我们看一个简单的 Makefile。 # Define our compiler as GCC CC=gcc # The main rule and targets hello: hello.c hellolib.c $(CC) -o hello hello.c hellolib.c # A rule to clean binaries clean: rm -f hello 在这个简单的项目中,我们首先定义一个名为 CC 的变量。虽然没有必要,但这帮助我们指定项目编译器。如果我们之后想更改,只需更改这一行代码。Make 可以定义多个变量,并在规则中使用,从而减少键入和重构的工作量。 文件中第一条规则“hello”,将成为默认规则,并在运行“make”命令时处理。另外,相关文件也已经列出, make 可以优化其构建顺序。接下来一行(空行之后),列出了创建目标的命令。注意前面变量CC的用法。 最后,我们定义了一个 clean 规则,通过“make clean”命令执行,在必要时删除生成的二进制文件,保持构建整洁。Clean 规则不是必需的,但是非常方便,尤其是在生成多个二进制文件时。 你可以通过安装规则(install rule)来添加此示例。许多通用软件包的说明都要求运行“make install”。但这样做只会触发安装规则,这个规则一般包括将编译的二进制文件复制到特定位置的命令。 许多GNU Make的新手在 makefile 中经常遇到语法问题。使用 tab 键在规则中缩进构建命令非常重要。空格(Space)键将不起作用,而且会导致 make 错误地执行 Makefile。
GNU Make 是编译软件项目中必不可少的工具,尤其是在 GNU 或 Linux 环境中。Makefile 语法简单,可智能化处理目标文件,这些功能都让它成为开发的最佳搭档。 Make 有各种简单方便的命令行参数,可帮助快速更改 Makefile 执行,其中包括 -j 开关,支持并行操作以获得更快的性能。 GNU Make 的另一个关键特点,是它属于GPL 3(通用公共许可证)许可的自由软件,因此终端用户可以有更多使用、修改软件的自由。
Make可以通过 -j 开关同时运行多个进程,不过这种同步化只是限制在一台机器上。Incredibuild 与 GNU Make 集成,全力推动从编译、测试到发布自动化的开发进程,以更快的速度向市场交付更好的产品。Incredibuild 进程虚拟化技术可以在你的网络、云中获取空闲 CPU,同时远程机器中模拟本地环境,将每台机器无缝切换成拥有数百个内核的超级计算机。