Makefile检查obj目录存在性时报错,请求协助解决
问题分析与解决
你的错误根源有两个核心问题:
1. Makefile条件语句缩进错误
Makefile中的ifeq/else/endif属于Make自身的控制语法,不是shell命令,必须顶格书写。如果缩进,Make会把它们当作shell命令传递给/bin/sh执行,而shell不识别ifeq语法,因此抛出语法错误。
2. 目录路径的引号问题
DIR_TO_CHECK_FOR := '/home/deepak/makefilefolder/obj'中的单引号会被当作路径的一部分,导致wildcard查找的是带单引号的路径(实际不存在),进而触发错误的判断逻辑。
修正后的完整Makefile
DIR_TO_CHECK_FOR := /home/deepak/makefilefolder/obj objects= obj/file1.o obj/file2.o obj/file3.o all: create create: ifeq ("$(wildcard $(DIR_TO_CHECK_FOR))", "") @echo "Folder does not exist" else @echo "Folder exists" endif $(objects): obj/%.o: src/%.c gcc -c $< -o $@ clean: rm -rf obj/
关键修改点说明
- 移除
DIR_TO_CHECK_FOR赋值中的单引号,确保路径是真实的目录路径 ifeq、else、endif保持顶格,只有它们下面的shell命令(@echo)需要用Tab缩进(Makefile要求命令行必须用Tab,不能用空格)- 编译规则和clean目标的缩进保持Tab,符合Makefile语法规范
执行make create即可正常判断目录是否存在。
内容的提问来源于stack exchange,提问作者Mr Deepak Gupta
相关产品推荐
相关产品推荐

