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

Makefile编译库时遇语法错误,求ifeq条件正确写法

Makefile中在首个目标编译时输出提示的正确实现

你遇到的问题根源是:把Make专属的ifeq条件语句直接写在了规则的命令块中。ifeq是Make的语法指令,会被Make展开后传递给shell执行,但shell无法识别该语法,因此触发了语法错误。

下面是两种可行的正确实现方式:

方式一:使用Make内置函数实现判断

利用Make的$(filter)和$(if)函数完成条件判断,这是更贴合Make语法的写法:

%.o: %.c ${HEADER}
	@$(if $(filter srcs/char/ft_isalpha.c,$<),echo "⏳ compiling libft",)
	@$(CC) -I ${CFLAGS} -c $< -o $@
  • $(filter srcs/char/ft_isalpha.c,$<):检查当前依赖文件$<是否匹配指定路径,匹配则返回路径字符串,否则返回空
  • $(if COND,THEN,ELSE):当COND非空时,执行THEN部分的echo命令,否则跳过

方式二:使用Shell的条件判断语句

直接在命令行中编写Shell原生的if逻辑,让shell处理条件判断:

%.o: %.c ${HEADER}
	@if [ "$<" = "srcs/char/ft_isalpha.c" ]; then echo "⏳ compiling libft"; fi
	@$(CC) -I ${CFLAGS} -c $< -o $@

注意:命令行必须用Tab键缩进(不能用空格),这是Makefile的硬性语法要求。

内容的提问来源于stack exchange,提问作者coromo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 09:45:42