📜  Windows 和 linux 的 makefile 变量 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 14:48:29.698000             🧑  作者: Mango

Windows 和 Linux 的 Makefile 变量 - Shell-Bash

在编写 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 的基础。