Windows下Makefile使用$^宏报错:非法字符'^',如何输出所有依赖?
Windows平台Makefile依赖项输出问题解决
这确实是Windows特有的问题
你用的应该是Windows自带的nmake工具,它和Linux/macOS上的GNU Make语法不兼容:
$^是GNU Make里表示所有依赖项的自动变量,但nmake不支持这个语法- 在Windows命令行和nmake中,
^是换行转义符,所以nmake会把$^判定为非法宏语法,抛出U1001错误
正确输出依赖项的两种方法
1. 继续使用nmake
nmake里对应GNU Make $^的变量有两种:
- 仅输出第一个依赖项:用
$<,修改后代码:
test.exe: main.obj echo $<
- 输出所有依赖项:用
$**配合循环,代码示例:
test.exe: main.obj utils.obj @for %%i in ($**) do @echo %%i
注:Makefile里的循环变量要写两个%,命令行直接执行时只用一个%
2. 改用GNU Make(推荐)
如果想保留$^这类标准语法,可以安装Windows版GNU Make(通过Chocolatey、MinGW或MSYS2都能装)。安装后用make或gmake命令执行原代码,就能正常输出所有依赖项:
test.exe: main.obj echo $^
内容的提问来源于stack exchange,提问作者DJames
相关产品推荐
相关产品推荐

