尝试使用 makefile 进行编译,但说找不到 mkdir 命令

Trying compile with makefile but say mkdir command not found

当我编译时收到一个错误,但命令存在我测试了我的其他项目并使用相同的 makefile 概念工作但现在在这只是不工作我不知道如何修复它,这是 make 的输出命令:

make:
mkdir obj
make: mkdir: Command not found
make: *** [Makefile:42: obj/main.o] Error 127

make -w:
make: Entering directory '/mnt/c/project/philo/philo'
mkdir obj
make: mkdir: Command not found
make: *** [Makefile:42: obj/main.o] Error 127
make: Leaving directory '/mnt/c/project/philo/philo'

我不知道为什么会出现这种情况,但即使我做了 make clean 也会对 rm 说同样的话,帮助。

我的生成文件:

P_INCLUDE       =   include/
P_SRC           =   src/

P_OBJ           =   obj/

#Files
F_SRC           =   main.c dinner.c legacy.c

OBJ             =   $(addprefix $(P_OBJ), $(F_SRC:.c=.o))

INC             =   -I $(P_INCLUDE)
CFLAGS          =   -Wall -Wextra -Werror
PATH            =   mkdir $(@D)
RM              =   rm -rf
cc              =   clang

NAME            =   philo

all:            $(NAME)

$(NAME):        $(OBJ)
                @echo '.o created in obj folder'
                $(CC) $(CFLAGS) -g $(INC) $(OBJ) -o $(NAME)
                @echo 'File(philo) created'

$(P_OBJ)%.o:    $(P_SRC)%.c
                $(PATH)
                $(CC) $(CFLAGS) -g $(INC) -c $< -o $@

clean:
                $(RM) $(P_OBJ)
                @echo 'All clean'

fclean:         clean
                $(RM) $(NAME)

re:             fclean all

.PHONY:         all clean fclean re

问题是您重置了 makefile 中的 PATH 变量:

PATH            =   mkdir $(@D)

现在,当您 运行 一个 shell 时,您的 $PATH 环境变量包含文本 mkdir foo,因此 shell 将尽职尽责地尝试找到你想要 运行 的程序在名为 mkdir foo 的目录中,就像它会尝试在 /usr/bin 中找到它们一样,如果你有 PATH = /usr/bin.

由于没有目录 mkdir foo,shell 无法找到它想要 运行 的任何程序,包括 mkdir.

您不应该修改 makefile 中的标准系统环境变量。也许您想使用类似的东西:

MKPATH          =   mkdir $(@D)

相反。