Makefile:CreateProcess(...)失败。该系统找不到指定的文件

时间:2019-09-03 19:03:48

标签: makefile mingw-w64

我正在尝试处理Makefile,并编写了一个简单的“程序”:

DELETE_COMMAND := del
COMPILER := gcc
SOME_TEXT := lalalalalalalalalalalal!!!

all: sum.o even.o main.o pi.o
    @$(COMPILER) -o output.exe sum.o even.o main.o pi.o
    SOME_TEXT_2 := $(subst la,La,$(SOME_TEXT))
    @echo $(SOME_TEXT_2)

clean:
    @$(DELETE_COMMAND) *.o
    @$(DELETE_COMMAND) output.exe

sum.o: sum.c sum.h
    @$(COMPILER) -c sum.c

main.o: main.c sum.h pi.h
    @$(COMPILER) -c main.c

pi.o: pi.c pi.h even.h
    @$(COMPILER) -c pi.c

even.o: even.c even.h
    @$(COMPILER) -c even.c

但是出现以下错误:

  

SOME_TEXT_2:= LaLaLaLaLaLaLaLaLaLaLaLal !!!
  process_begin:CreateProcess(NULL,SOME_TEXT_2:= LaLaLaLaLaLaLaLaLaLaLaLal !!!,...)失败。
  make(e = 2):系统找不到指定的文件。
  make:*** [Makefile:7:全部]错误2

问题是由以下行引起的:

    SOME_TEXT_2 := $(subst la,La,$(SOME_TEXT))

但是我不知道问题是什么。 我在Windows上使用的是mingw-w64。

1 个答案:

答案 0 :(得分:1)

考虑规则...

all: sum.o even.o main.o pi.o
        @$(COMPILER) -o output.exe sum.o even.o main.o pi.o
        SOME_TEXT_2 := $(subst la,La,$(SOME_TEXT))
        @echo $(SOME_TEXT_2)

假设除第一行外的所有行均以制表符开头,则每个命令将在单独的shell中运行。但是...

SOME_TEXT_2 := $(subst la,La,$(SOME_TEXT))

无效的shell语法-似乎应该由make解释。

如果仅是修改变量SOME_TEXT并打印结果,则可以选择...

all: sum.o even.o main.o pi.o
        @$(COMPILER) -o output.exe sum.o even.o main.o pi.o
        @echo $(subst la,La,$(SOME_TEXT))

或者让make分配给SOME_TEXT_2 ...

SOME_TEXT_2 := $(subst la,La,$(SOME_TEXT))

all: sum.o even.o main.o pi.o
        @$(COMPILER) -o output.exe sum.o even.o main.o pi.o
        @echo $(SOME_TEXT_2)