
在日常开发中,make #%#$#%@%@%$#%$#%#%#$%@_20dc++e2c6fa909a5cd62526615fe2788a凭借其强大的自动化构建能力广受欢迎。它内置了一系列隐式规则,例如针对 c、c++ 和 fortran 源文件的编译规则,使得在不编写 makefile 的情况下也能完成简单的编译任务。然而,当涉及到其他语言(如 go、rust 或自定义脚本)时,make 默认不提供相应的隐式规则,通常需要为每个项目编写专门的 makefile。这对于希望在整个开发环境中拥有统一、全局可用的隐式规则的开发者来说,无疑增加了重复工作。
Make 隐式规则的扩展需求
用户常常希望能够像 Make 的内置规则一样,为特定语言或任务定义全局可用的隐式规则,而无需在每个项目目录中重复定义。例如,对于 Go 语言项目,如果希望执行 make myprogram 就能自动将 myprogram.go 编译为可执行文件,就需要一种机制来扩展 Make 的默认行为。
全局隐式规则的实现原理
Make 工具提供了一个名为 MAKEFILES 的环境变量,它允许用户指定在当前 Makefile 之前加载的一个或多个额外 Makefile 文件。当 Make 运行时,它会首先处理 MAKEFILES 环境变量中指定的文件,然后才是当前目录下的 Makefile(如果存在)。这意味着,我们可以在这些全局加载的 Makefile 中定义自定义的隐式规则、变量或目标,使它们在所有 Make 调用中都可用。
创建全局 Makefile
首先,我们需要创建一个包含自定义隐式规则的全局 Makefile 文件。这个文件可以放置在任何你方便的位置,例如用户主目录下的 .makerc 或 .make_global_rules,或者系统级的 /etc/make/global.mk。
以下是一个为 Go 语言定义隐式规则的 global.mk 示例:
# 文件名: global.mk (或 ~/.makerc)
# 这是一个用于Go语言的全局隐式规则
.PHONY: all
# 隐式规则:将 .go 文件编译为同名可执行文件
# 例如,如果存在 main.go,执行 make main 即可编译
%: %.go
@echo "Compiling Go file $<..."
go build -o $@ $<
@echo "Successfully compiled $@."
# 也可以添加其他全局通用的规则或变量
# 例如:
# GOFLAGS := -v
# export GOFLAGS在这个示例中:
配置 MAKEFILES 环境变量
创建了全局 Makefile 后,下一步就是将其路径添加到 MAKEFILES 环境变量中。这样,Make 就能在每次运行时找到并加载它。
临时设置: 在当前 shell 会话中临时生效:
export MAKEFILES=/path/to/your/global.mk
请将 /path/to/your/global.mk 替换为你实际的 global.mk 文件路径。
永久设置: 为了让设置在每次启动 shell 时都生效,可以将上述 export 命令添加到你的 shell 配置文件中,例如:
编辑文件并添加:
# ~/.bashrc 或 ~/.zshrc export MAKEFILES="/home/youruser/.makerc" # 示例路径
保存文件后,重新启动终端或执行 source ~/.bashrc(或 source ~/.zshrc)使更改生效。
使用示例
假设你已经创建了 global.mk 并设置了 MAKEFILES 环境变量。现在,在一个包含 hello.go 文件的目录中:
// hello.go
package main
import "fmt"
func main() {
fmt.Println("Hello from Go!")
}你无需创建 Makefile,只需在终端中执行:
make hello
Make 将会加载 global.mk 中的隐式规则,并执行 go build -o hello hello.go 命令,最终生成一个名为 hello 的可执行文件。
注意事项
总结
通过巧妙利用 MAKEFILES 环境变量,我们可以为 Make 扩展全局可用的隐式规则,极大地提升个人开发环境的便利性。这种方法使得在处理特定语言或重复性任务时,无需为每个项目编写冗余的 Makefile。然而,开发者必须权衡这种便利性与项目可移植性之间的关系,并根据实际需求选择最合适的构建策略。对于个人工作流的优化,全局 Makefile 无疑是一个强大而有效的工具。
以上就是扩展 Make 的隐式规则:利用 MAKEFILES 环境变量创建全局默认规则的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号