使用nmake.exe窗口在makefile中无法识别addprefix命令

all: prd.exe CC=cl CFLAGS=-O2 -I../src -I. /W4 LDFLAGS = /Zi LIBSRC = $(addprefix ../lib/, \ open.c malloc.c \ ) \ $(addprefix ../src/, \ main.c \ ) \ helper.c LIBOBJS = $(LIBSRC:.c=.o) prd.exe: ../src/main.obj $(CC) $(LDFLAGS) -Fe$@ *.o ../src/main.obj: ../src/main.c $(CC) $(CFLAGS) $(LIBOBJS) -c $< -Fo $@ .co: $(CC) $(CFLAGS) $(LIBOBJS) -c $< -Fo $@ .ci: $(CC) $(CFLAGS) $(LIBOBJS) -C -E $< > $@ clean: del /s /f /q ..\lib\*.o ..\src\*.o *.o *.exe *.pdb distclean: clean 

我得到这个错误

致命错误U1000:语法错误:')'在第6行的macros调用中缺less

我在这里错过了什么? nmake确实可以识别addprefix,对吗?

不, addprefix是一个GNU make扩展。 你有一个需要GNU make(gmake)来处理的GNUmakefile。

或者,您可以重写GNU makefile以不使用GNU扩展。 在你的情况下,这应该很容易:

 LIBSRC = $(addprefix ../lib/, \ open.c malloc.c \ ) \ $(addprefix ../src/, \ main.c \ ) \ helper.c 

 LIBSRC = ../lib/open.c ../lib/malloc.c ../src/main.c helper.c