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
相关产品推荐
相关产品推荐

