You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 13:12:13