Bla*_*edt 5 windows mingw makefile
重要编辑:我已经用我的特定 makefile 解决了这个问题,但我不知道如何解决。
我用正斜杠替换了反斜杠,事实证明我的规则适用于这些规则。Gcc 接受混合的正斜杠和反斜杠,所以它工作得很好。存在一个症结点mkdir
:它不接受带有混合正斜杠和反斜杠的路径。我将变量更改为在 Windows 版本中仅包含反斜杠,现在该文件可以完美运行。
作为参考,这里有一些新规则和变量:
OUT = $(ROOT)\out
SRC = $(ROOT)\src
$(OUT):
mkdir $(OUT)
$(OUT)/%.o: $(SRC)/%.c
$(CC) $(CFLAGS) -o $@ -c $<
为什么 minGW-make 在变量扩展后接受规则中的混合斜杠而不是仅接受反斜杠?这里究竟发生了什么?
我安装了 make for windows 的 minGW。我复制了 unix makefile 并将命令转换为 windows(并将正斜杠转换为反斜杠),但生成的 makefile 不起作用。
主要区别在于 Windows 有$(OUT) = $(ROOT)\out\win
而 Unix 有$(OUT) = $(ROOT)/out
。Unix 运行良好。 make -f makefile.win
在 Windows 上抱怨没有规则<root>\out\win\LinkedList.o
。有问题的规则和错误是:
make: *** No rule to make target `H:\CodeRIT\1014Syllables\out\win\LinkedList.o', needed by `H:\CodeRIT\1014Syllables\out\win\bin\syllables.exe'. Stop.
$(OUT)\%.o: $(ROOT)\src\%.c
gcc $(CFLAGS) -o $@ -c $<
$(OUT)\bin\syllables.exe: $(OUT)\LinkedList.o $(OUT)\Syllable.o $(OUT)\Model.o
gcc $(CFLAGS) -o $@ $^
$(OUT) 应该扩展为<root>\out\win
它抱怨的文件提供一个明确的目标。我不明白为什么这个规则不起作用,因为同样的规则在 Unix 上运行得很好。是否有一些关于目标中最大目录的神秘规则或其他规则?我没有足够的 make 经验来真正评估这里出了什么问题。
以下是相关文件的全文:https://github.com/blastedt/syllables/blob/master/makefile.win
$(OUT)\%.o:
没有定义模式规则,您已经转义了%
.
$(OUT)\\%.o:
在这种情况下应该可以工作,尽管正是因为这样的陷阱,在 Windows 上使用 make 时最好避免反斜杠。
您将遇到 shell 命令的问题,例如mkdir
不del
使用正斜杠,您应该考虑切换到 powershell、cygwin、MSYS2 或windows 上的 bash。
归档时间: |
|
查看次数: |
6730 次 |
最近记录: |