尝试使用 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)
相反。
当我编译时收到一个错误,但命令存在我测试了我的其他项目并使用相同的 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)
相反。