重要更正:我已经解决了我的特定makefile的问题,但我不知道如何解决。
我用正斜杠替换了反斜杠,结果发现我的规则在正斜杠下工作良好。Gcc接受混合的前向和后向斜杠,所以它工作得很好。其中一个难点存在于mkdir:它不接受混合的正向和反向斜杠路径。在Windows版本中,我将变量更改为仅包含反斜杠,现在该文件完美运行。
以下是一些新规则和变量: OUT = $(ROOT)\out SRC = $(ROOT)\src $(OUT): mkdir $(OUT) $(OUT)/%.o: $(SRC)/%.c $(CC) $(CFLAGS) -o $@ -c $<
为什么mingw-make在变量扩展后接受混合斜杠却不允许只有反斜杠?这到底是怎么回事?
原始帖子:
我在Windows上安装了minGW,并复制了我的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:***没有为目标“H:\CodeRIT\1014Syllables\out\win\LinkedList.o”制定规则,需要“H:\CodeRIT\1014Syllables\out\win\bin\syllables.exe”。 停止。 $(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
我用正斜杠替换了反斜杠,结果发现我的规则在正斜杠下工作良好。Gcc接受混合的前向和后向斜杠,所以它工作得很好。其中一个难点存在于mkdir:它不接受混合的正向和反向斜杠路径。在Windows版本中,我将变量更改为仅包含反斜杠,现在该文件完美运行。
以下是一些新规则和变量: OUT = $(ROOT)\out SRC = $(ROOT)\src $(OUT): mkdir $(OUT) $(OUT)/%.o: $(SRC)/%.c $(CC) $(CFLAGS) -o $@ -c $<
为什么mingw-make在变量扩展后接受混合斜杠却不允许只有反斜杠?这到底是怎么回事?
原始帖子:
我在Windows上安装了minGW,并复制了我的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:***没有为目标“H:\CodeRIT\1014Syllables\out\win\LinkedList.o”制定规则,需要“H:\CodeRIT\1014Syllables\out\win\bin\syllables.exe”。 停止。 $(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
PATH_SEP = \\
这样的东西,或者在执行之前使用一个替换 / 为 \ 的函数。这些是可靠的解决方案来解决这些问题吗?我在 Windows 上使用 Ubuntu 的 bash,但根据我的经验,它不能执行我创建的文件,所以我还需要 Windows 的构建链。 - Blastedtrm
的bash功能,但最后发现这太麻烦了,所以我转而使用powershell加上正斜杠。反正自从Windows 7起,默认已经安装了powershell。 - user657267