这是有问题的 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:
结果是:
make: Fatal error in reader: Makefile, line 18: Unexpected end of line seen
这个问题有多个重复项,但他们都建议使用
gmake
而不是 make
。虽然这有效,但我不想使用gmake
。
这是 Solaris 的 make 手册页:make
跑步:
make -x SUN_MAKE_COMPAT_MODE=GNU test
输出相同。
将
:=
形式的所有分配更改为 =
即可解决问题。
Solaris make 文档将
:=
定义为“条件宏赋值”,而 GNU make 文档将其定义为“简单扩展变量赋值”。