Windows makefiles

时间:2016-11-06 23:02:13

标签: windows makefile mingw

重要编辑:我已经解决了我的特定makefile的问题,但我不知道如何。

我用正斜杠替换了反斜杠,事实证明我的规则可以正常工作。 Gcc接受混合前向和反斜杠,因此它工作正常。 mkdir存在一个粘滞点:它不接受混合前向和后斜杠的路径。我将我的变量更改为仅在Windows版本中包含反斜杠,现在文件工作正常。

作为参考,这里有一些新的规则和变量:

OUT = $(ROOT)\out SRC = $(ROOT)\src $(OUT): mkdir $(OUT) $(OUT)/%.o: $(SRC)/%.c $(CC) $(CFLAGS) -o $@ -c $<

为什么minGW-make在变量扩展后接受规则中的混合斜杠而不是反斜杠?这究竟是什么?

原帖

我有一个minGW安装make for windows。我复制了我的unix makefile并将命令转换为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上运行得很好。关于目标中的最大目录是否有一些神秘的规则?我没有足够的经验来真正评估这里出了什么问题。

以下是相关文件的全文:https://github.com/blastedt/syllables/blob/master/makefile.win

1 个答案:

答案 0 :(得分:0)

$(OUT)\%.o:未定义模式规则,您escaped %

$(OUT)\\%.o:应该在这种情况下工作,虽然这是因为这样的问题,在Windows上使用make时最好避免使用反斜杠。

你会遇到像mkdirdel这样没有使用正斜杠的shell命令的问题,你应该考虑切换到powershell,cygwin,MSYS2或bash on windows