【发布时间】:2021-02-26 16:14:38
【问题描述】:
在使用 msys 的 makefile 中使用 INCLUDE 指令的问题。
我在 PATH 中添加了 MSYS,直到这里都没问题:
PS C:\Users\Roxanji> Get-Command make
CommandType Name Version Source
----------- ---- ------- ------
Application make.exe 0.0.0.0 C:\Program Files\msys\bin\make.exe
PS C:\Users\Roxanji> Get-Command bash
CommandType Name Version Source
----------- ---- ------- ------
Application bash.exe 0.0.0.0 C:\Program Files\msys\bin\bash.exe
Makefile 示例:
-include a1
a1:
@echo something: > a1
.PHONY: clean
clean:
$(RM) a1
在 Windows cmd/powershell 上:
PS C:\Users\Roxanji\eclipse-workspace\prototype\tst> ls
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 15.11.2020 05:53 81 Makefile
PS C:\Users\Roxanji\eclipse-workspace\prototype\tst> make
make.exe": /c/Users/Roxanji/eclipse-workspace/prototype/tst/"C:/Program Files/msys/bin/make.exe": Command not found
PS C:\Users\Roxanji\eclipse-workspace\prototype\tst> ls
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 15.11.2020 06:03 11 a1
-a---- 15.11.2020 05:53 81 Makefile
在 Windows 上使用来自 msys 的 bash:
PS C:\Users\Roxanji\eclipse-workspace\prototype\tst> bash
bash.exe"-3.1$ pwd
/c/Users/Roxanji/eclipse-workspace/prototype/tst
bash.exe"-3.1$ ls
Makefile
bash.exe"-3.1$ make
make: Nothing to be done for `something'.
bash.exe"-3.1$ ls
Makefile a1
bash.exe"-3.1$
使用 cmd/powershell 的事实:
- 已生成文件“a1”。
- 找不到命令消息。
使用 msys bash 的事实:
- -生成文件“a1”。
我认为发生了什么?
-
我看到 windows 斜线“\”和 unix 斜线有些混合 "/"
-
我看到在 bash 下的 make“位置”似乎与 msys 不同:
bash.exe"-3.1$ which make /usr/bin/make.exe -
我看到在 msys/bash 下也有这条消息
make: Nothing to be done for 'something'。
我认为当 make 命中 include 时,会生成另一个 make.exe 来读取这个其他文件,但从 make 内部调用,它具有不同的 make 路径,这会导致一些问题。
谁能解释一下这个现象??
编辑 1: 使用 powershell:
PS C:\Users\Roxanji\eclipse-workspace\prototype\tst> make -np | grep MAKE_COMMAND
MAKE = $(MAKE_COMMAND)
MAKE_COMMAND := /c/Users/Roxanji/eclipse-workspace/prototype/tst/"C:/Program Files/msys/bin/make.exe"
MAKE_COMMAND 变量 bee 不应该等于“make”吗?
喜欢:MAKE_COMMAND := make ?
编辑 2:
我认为问题可以归结为我无法在 C:\Program Files\ 下运行 msys.bat,因为显然“程序文件”中有空格??
【问题讨论】:
-
我的经验是,如果你想直接从 Windows 运行 make,你应该使用 make 的本地构建(没有 cygwin,没有 msys)。这会产生更可预测的结果。
-
@raspy C:\Program Files\msys\bin\make.exe 不是 make 的原生构建吗?
-
没有。它可能是使用 MinGW 概念的 MinGW 构建。本地人
make --version应该说类似Built for Windows32