GNU Make
GNU Make 是一个非常流行的开发工具,用于协调软件项目编译。Make 通常用于管理 GCC编译器套件,但也适用于其他软件开发或打包任务。
什么是 GNU Make?
GNU Make 是一个流行的开发工具,可协调编译软件项目。Make 通常用于管理 GCC 编译器套件,但也可用于其他软件开发或打包任务。
大型 C/C++ 程序构建通常步骤较多,所以需要一个工具,如 SUP,确保所有源文件都已完成编译、链接。此外,Make 还可以帮助开发人员控制打包、安装辅助文件,如文档、man 手册页、systemd 配置文件、init 脚本和配置模板。
Make 不局限于 C/C++ 这一类语言。网页开发师还可以使用 GNU Make 来简化 CSS 和 JS 等重复性的任务,系统管理员则可以自动维护任务。
此外,Make 使用门槛低,终端用户也可以使用 Make 来编译和安装软件,即使在没有任何程序知识的情况下,也能轻松搞定。
它可以做什么,如何使用它?
GNU Make 负责处理 Makefile 文件,指导软件构建,通过循环访问指令,确定规则和目标输出。
Makefile 规则是一组统一命名的命令,各个命令一起执行创建输出文件,这个文件则称为目标输出文件(通常是库或可执行文件)。如果目标已经存在,而源代码还没有更新,make可以自动跳过不必要的构建步骤,减少编译时间。
CMake vs Make
相关阅读GNU Make 的发展历史
Make 创建于 1976 年 4 月,其创始人为 Stuart Feldman。GNU 在 20 世纪 80 年代末发布了自由软件版本。现在,版本 3.56 仍然可以从 GNU FTP 服务器上获得(通过diffs),其历史可追溯到 1989 年 9 月 23 日。
目前的最新版本是 GNU Make 4.3,发布于 2020 年 1 月 19 日。
如何下载、安装 GNU Make ?
如果你使用的是 Linux 系统,make程序可能已内置。如果系统内并无make程序,可以使用以下命令进行安装:
- Debian/Ubuntu – apt install make
- Fedora/RHEL – yum install make
- Arch/Manjaro – pacman -S make
这一步是负责安装 make 程序,此外,如果你也需要附带的开发工具,则可以运行:
- Debian/Ubuntu – apt install build-essential
- Fedora/RHEL – yum groupinstall ‘Development Tools’
- Arch/Manjaro – pacman -S base-devel
Windows系统可以安装、使用MinGW(全称: Minimalist GNU for Windows),或启用WSL(全称:Windows Subsystem for Linux),同时安装所需的Linux发行版。最后,根据个人需求运行上面的命令。
GNU 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(通用公共许可证)许可的自由软件,因此终端用户可以有更多使用、修改软件的自由。
GNU Make 与 Incredibuild
Make可以通过 -j 开关同时运行多个进程,不过这种同步化只是限制在一台机器上。Incredibuild 与 GNU Make 集成,全力推动从编译、测试到发布自动化的开发进程,以更快的速度向市场交付更好的产品。Incredibuild 进程虚拟化技术可以在你的网络、云中获取空闲 CPU,同时远程机器中模拟本地环境,将每台机器无缝切换成拥有数百个内核的超级计算机。
要点总结
GNU Make 是 GNU/Linux 生态系统的基石。Linux 系统构建任务离不开 Make。Make 实用性高,性能优异,甚至可以自动化处理包括 Linux 内核在内的最为复杂的构建。
获取免费 License