📅  最后修改于: 2023-12-03 14:48:29.698000             🧑  作者: Mango
在编写 Makefile 的过程中,变量是很常见的概念,可以方便地减少代码量,提高可读性和可维护性。本文介绍了在 Windows 和 Linux 中常见的 Makefile 变量定义和使用方式。
在 Makefile 中,变量可以使用 VAR_NAME = VAR_VALUE
的方式进行定义。其中,VAR_NAME
为变量名,VAR_VALUE
为变量值。
在 Windows 中,变量的定义需使用 set
关键字,形式为 set VAR_NAME=VAR_VALUE
。注意 Windows 的变量名不区分大小写,但是变量值会保留大小写。
# Makefile 变量定义的例子
# Linux
VAR_NAME = VAR_VALUE
# Windows
set VAR_NAME=VAR_VALUE
在 Makefile 的语法中,变量的使用形式为 $(VAR_NAME)
,其中 VAR_NAME
为定义的变量名。
在 Linux 中,Makefile 默认使用 Bash,而在 Bash 中,$VAR_NAME
和 ${VAR_NAME}
等价于 $(VAR_NAME)
。可以使用这些形式进行变量的使用。
在 Windows 中,Makefile 默认使用 Command Prompt(cmd.exe),而在 Command Prompt 中,%VAR_NAME%
代表变量的值。所以在 Makefile 中调用变量需使用 $(VAR_NAME)
或者 ${VAR_NAME}
的形式。
# Makefile 变量使用的例子
# Linux
VAR_NAME = VAR_VALUE
SOME_PATH = /home/user
# 输出变量
echo $(VAR_NAME)
# 使用变量
cp $(SOME_PATH)/file1 $(SOME_PATH)/file2
# Windows
set VAR_NAME=VAR_VALUE
set SOME_PATH=C:\Users\User
# 输出变量
echo %VAR_NAME%
# 使用变量
copy %SOME_PATH%\file1 %SOME_PATH%\file2
Makefile 中有很多预定义的变量,可以直接使用,也可以进行重定义。这些预定义的变量包括:
$@
:表示目标文件名。$<
:表示第一个依赖文件的文件名。$^
:表示所有依赖文件的文件名。$(MAKE)
:表示执行 make 命令的程序,通常为 make
或者 gmake
。# 预定义的变量例子
SOME_PATH = /home/user
# 复制文件并显示操作信息
cp some_file $(SOME_PATH)/new_file || echo "Failed to copy $< to $@"
在 Makefile 中,可以使用环境变量。在 Linux 中,可以直接使用 $ENV_VAR_NAME
的形式调用环境变量。在 Windows 中,使用 %ENV_VAR_NAME%
的形式调用环境变量。Makefile 中的环境变量优先级高于系统中的环境变量。
# 环境变量例子
# Linux
MY_ENV_VAR = $(ENV_VAR_NAME)
echo $(MY_ENV_VAR)
# Windows
set MY_ENV_VAR=%ENV_VAR_NAME%
echo %MY_ENV_VAR%
通过本文,我们对 Windows 和 Linux 中 Makefile 变量的定义和使用方式有了更深入的了解。在日常的开发过程中,合理地使用变量可以提高代码的可读性和可维护性,是我们编写高质量 Makefile 的基础。