You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSL下GNU Make用=赋值无法拼接变量,:=正常的原因咨询

WSL下GNU Make延迟赋值(=)失效问题排查

在WSL(Windows Subsystem for Linux)Ubuntu 20.04环境中使用GNU Make时,遇到变量赋值异常:使用=进行延迟赋值时,变量拼接未按预期工作,但切换为:=立即赋值则一切正常。相同的Makefile在Ubuntu虚拟机中可正常运行。

最简复现Makefile

OUTPUT_DIR = 123
BIN = my_program

all:
    echo "$(OUTPUT_DIR)/$(BIN)"

观测到的行为

  • WSL环境:执行make后输出为空变量拼接结果:
/

可见$(OUTPUT_DIR)和$(BIN)均被解析为空值。

  • Ubuntu虚拟机环境:执行make后输出符合预期:
123/my_program

临时可行方案

将变量赋值从=(延迟展开)改为:=(立即展开),WSL和虚拟机环境均能正常工作:

OUTPUT_DIR := 123
BIN := my_program

all:
    echo "$(OUTPUT_DIR)/$(BIN)"

执行make后输出:

123/my_program

环境信息

WSL环境

  • WSL版本:WSL 2
  • 发行版:Ubuntu 20.04
  • GNU Make版本:4.3
  • 文件系统:NTFS(Windows文件系统)

虚拟机环境

  • 虚拟化平台:VMware
  • 发行版:Ubuntu 20.04
  • GNU Make版本:4.3
  • 文件系统:ext4

已尝试操作

  • 检查文件格式:通过dos2unix Makefile将文件转为Unix换行符(LF),问题仍存在。
  • 升级环境:确认WSL为版本2,GNU Make为最新可用的4.3版本。
  • 测试立即展开:验证:=可正常工作,但需明确=失效的原因。

疑问

  1. 为何=在WSL中无法正常拼接变量,但在虚拟机中可以?
  2. 该问题是否与WSL底层的NTFS文件系统或GNU Make与WSL的交互逻辑有关?
  3. 是否存在相关已知问题或针对性解决方法?

内容的提问来源于stack exchange,提问作者范北海

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 07:27:13