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

Solaris 11.4下Makefile遇Unexpected EOL错误,拒绝使用gmake求解

Solaris 11.4原生make执行Makefile报错的解决办法(无需gmake)

问题场景

在Solaris 11.4系统中使用原生make执行给定Makefile时,触发错误:

make: Fatal error in reader: Makefile, line 18: Unexpected end of line seen

用户不愿改用gmake,且尝试make -x SUN_MAKE_COMPAT_MODE=GNU test后仍报错,需原生make兼容的解决方案。

错误原因

报错根源在test目标的变量传递行:Solaris原生make对引号的解析逻辑与GNU make完全不同,EXTRA_CFLAGS="-DDEBUG"这种带引号的赋值写法会被判定为语法错误,导致解析中断。

解决步骤

1. 修正test目标的变量传递语法

将原test目标中的带引号赋值改为原生make兼容的形式,直接去掉引号即可(因-DDEBUG无空格等特殊字符,无需引号):

test: 
	$(MAKE) EXTRA_CFLAGS=-DDEBUG $(TEST_TARGET)
	./$(TEST_TARGET) --verbose=3

若后续需传递含空格的CFLAGS参数,可改用环境变量导出的方式:

test: 
	EXTRA_CFLAGS="-DDEBUG -O0" ; export EXTRA_CFLAGS; $(MAKE) $(TEST_TARGET)
	./$(TEST_TARGET) --verbose=3

2. 确保命令行缩进为硬制表符

Solaris原生make要求所有命令行必须用**硬制表符(Tab)**缩进,不能用空格替代。检查Makefile中所有命令行(如$(AR) rcs $@ $(TARGET).o等行)的缩进是否为Tab,避免因空格缩进引发其他语法错误。

修改后的完整Makefile

CFLAGS += -std=c11
CFLAGS += -fPIC
CFLAGS += -Wall
CFLAGS += -Wextra
CFLAGS += -Werror
CFLAGS += -Wwrite-strings
CFLAGS += -Wno-unused-variable
CFLAGS += -Wno-parentheses
CFLAGS += -Wpedantic
CFLAGS += -Warray-bounds
CFLAGS += -Wno-unused-function
CFLAGS += -Wstrict-prototypes
CFLAGS += -Wdeprecated

CFLAGS += $(EXTRA_CFLAGS)

TARGET := arena
TEST_TARGET := tests
SLIB_TARGET := libarena.a
DLIB_TARGET := libarena.so

RM := /bin/rm -f

static: $(SLIB_TARGET)

$(SLIB_TARGET): $(TARGET).o
	$(AR) rcs $@ $(TARGET).o

shared: $(DLIB_TARGET)

$(DLIB_TARGET): $(TARGET).o
	$(CC) $(CFLAGS) $(TARGET).o -o $@ $(LDFLAGS) -shared

test: 
	$(MAKE) EXTRA_CFLAGS=-DDEBUG $(TEST_TARGET)
	./$(TEST_TARGET) --verbose=3

clean: 
	$(RM) $(TEST_TARGET) $(TARGET).o $(SLIB_TARGET) $(DLIB_TARGET)

.PHONY: release debug static shared test clean
.DELETE_ON_ERROR:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:46:19