重要编辑:我已经用我的特定makefile解决了这个问题,但我不知道如何解决。
我用正斜杠代替了反斜杠,结果证明我的规则对这些都很有效。Gcc接受正反斜线的混合,所以效果很好。mkdir
存在的一个症结是:它不接受带有正斜杠和反斜线的混合路径。我更改了变量,使其只包含Windows版本中的反斜杠,现在该文件工作得很好。
作为参考,以下是一些新的规则和变量:
OUT = $(ROOT)\out SRC = $(ROOT)\src $(OUT): mkdir $(OUT) $(OUT)/%.o: $(SRC)/%.c $(CC) $(CFLAGS) -o $@ -c $<
为什么minGW-使接受混合斜杠在规则后,变量展开,而不是反斜杠-只?到底是怎么回事?
原始员额
我有一个minGW安装的。我复制了unix并将命令转换为windows (并将正斜杠转换为反斜杠),但是生成的makefile无法工作。
主要的区别是Windows有$(OUT) = $(ROOT)\out\win
,Unix有$(OUT) = $(ROOT)/out
。Unix很好用。windows上的make -f makefile.win
抱怨<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
https://stackoverflow.com/questions/40455549
复制相似问题