【问题标题】:make: gcc: Command not found with include in makefile制作:gcc:在makefile中找不到包含包含的命令
【发布时间】:2018-10-09 12:32:22
【问题描述】:

我正在尝试创建一个 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

子目录生成文件:

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

SOURCES     += $(PATH)/main.c

当我在顶级目录中“制作”时,出现以下错误:

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 -pedantic proj/main.c -o proj.exe) 时,它正在构建中。

如果我删除 makefile 包含,他会识别 gcc 但不会构建,因为没有源(正常行为)。

【问题讨论】:

    标签: gcc makefile


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      GNU Make manual 说:

      make 运行配方时,makefile 中定义的变量是 放置在每个外壳的环境中。这可以让你通过 子make 调用的值(请参阅Recursive Use of make)。默认情况下,只有来自环境的变量 或者命令行被传递给递归调用。

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

      为避免这种混淆,请勿使用PATH 作为生成文件变量。使用与 shell 所依赖的环境变量不同的另一个名称。你可以改成PROJECT_PATH,或者直接用$(PROJECT)代替$(PATH)

      【讨论】:

        猜你喜欢
        • 2017-10-12
        • 1970-01-01
        • 1970-01-01
        • 2014-11-02
        • 2011-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-16
        相关资源
        最近更新 更多