make:gcc:在makefile中找不到包含的命令

make:gcc:在makefile中找不到包含的命令,gcc,makefile,Gcc,Makefile,我正在尝试创建一个makefile体系结构,因此我在顶部有一个全局makefile,它调用子目录中的另一个 全局生成文件: CC = gcc CFLAGS = -W -Wall -pedantic LDFLAGS = PROJECT = proj SOURCES = PATH = $(PROJECT) include $(PATH)/Makefile all : $(PROJECT).exe $(PROJECT).exe

我正在尝试创建一个makefile体系结构,因此我在顶部有一个全局makefile,它调用子目录中的另一个

全局生成文件:

CC          = gcc
CFLAGS      = -W -Wall -pedantic
LDFLAGS     =

PROJECT     = proj

SOURCES     =

PATH        = $(PROJECT)
include $(PATH)/Makefile

all : $(PROJECT).exe

$(PROJECT).exe :
  $(CC) $(CFLAGS) $(LDFLAGS) $(DEFINES) $(INCLUDES) $(SOURCES) -o $@

clean :
  rm -rf *.exe
子目录makefile:

CC          = gcc
CFLAGS      = -W -Wall -pedantic
LDFLAGS     = 

SOURCES     += $(PATH)/main.c
当我在顶层目录中“make”时,出现以下错误:

gcc -W -Wall -pedantic     proj/main.c -o proj.exe
make: gcc: Command not found
make: *** [Makefile:17: FK16_jake.exe] Error 127
但当我在终端中键入完全相同的命令(gcc-W-Wall-pedanticproj/main.c-oproj.exe)时,它正在生成


如果我删除makefile include,他会识别gcc,但不会生成,因为没有源代码(正常行为)。

您正在覆盖路径,该路径用于确定在何处查找可执行文件。更改此变量,它应该会工作

您正在覆盖路径,该路径用于确定在何处查找可执行文件。更改此变量,它应该会工作

在UNIX shell中,指定运行命令时搜索可执行文件的目录集

报告说:

make
运行配方时,makefile中定义的变量为 放置在每个外壳的环境中。这允许你通过考试 要进行调用的sub-
值(请参阅)。默认情况下,只有来自环境的变量
或者将命令行传递给递归调用

因为
PATH
是一个shell变量,并且是在
make
环境中定义的,所以它是“来自环境”。这意味着当您使用
PATH=$(PROJECT)
修改值时,更新的值将在运行
$(PROJECT.exe)配方的shell环境中设置。这意味着shell在
路径的值不正确的情况下运行,因此无法找到
gcc

为了避免这种混淆,不要将
PATH
用作makefile变量。使用与shell所依赖的环境变量不同的另一个名称。您可以将其称为
PROJECT\u PATH
,或者只使用
$(PROJECT)
而不是
$(PATH)

在UNIX shell中,指定在运行命令时搜索可执行文件的目录集

报告说:

make
运行配方时,makefile中定义的变量为 放置在每个外壳的环境中。这允许你通过考试 要进行
调用的sub-
值(请参阅)。默认情况下,只有来自环境的变量
或者将命令行传递给递归调用

因为
PATH
是一个shell变量,并且是在
make
环境中定义的,所以它是“来自环境”。这意味着当您使用
PATH=$(PROJECT)
修改值时,更新的值将在运行
$(PROJECT.exe)配方的shell环境中设置。这意味着shell在
路径的值不正确的情况下运行,因此无法找到
gcc

为了避免这种混淆,不要将
PATH
用作makefile变量。使用与shell所依赖的环境变量不同的另一个名称。您可以将其称为
PROJECT\u PATH
,或者只使用
$(PROJECT)
而不是
$(PATH)