Makefile g++;无法为多个文件指定-c和-o

Makefile g++;无法为多个文件指定-c和-o,makefile,g++,Makefile,G++,为什么我会出现这个错误,而patsubst没有显示用于编译的权限输出,我真的很困惑-c和-o不应该在CFLAGS中。相反,在适当的情况下,这些应该直接出现在编译器命令行中 另外,$(LIBOBJS)目标不正确,您需要一个模式规则。您拥有的规则将期望一次编译器调用来构建所有对象;但实际上,每个对象需要调用编译器一次 而不是$(LIBOBJS):$(LIBSRCS)等。它可以是: CC=g++ CFLAGS=-c -o PROG=craps LIBSRCS=craps.cpp craps_game.

为什么我会出现这个错误,而patsubst没有显示用于编译的权限输出,我真的很困惑

-c
-o
不应该在
CFLAGS
中。相反,在适当的情况下,这些应该直接出现在编译器命令行中

另外,
$(LIBOBJS)
目标不正确,您需要一个模式规则。您拥有的规则将期望一次编译器调用来构建所有对象;但实际上,每个对象需要调用编译器一次

而不是
$(LIBOBJS):$(LIBSRCS)
等。它可以是:

CC=g++
CFLAGS=-c -o
PROG=craps
LIBSRCS=craps.cpp craps_game.cpp craps_helper.cpp craps_io.cpp
LIBOBJS=$(patsubst %.cpp, %.o, $(LIBSRCS))
LIBCRAPS=craps
CXXFLAGS=-I./ -fpic
LDFLAGS=-L./

all: $(PROG)

$(PROG): $(LIBOBJS)
    $(CC) $(LDFLAGS) -l$(LIBCRAPS) -o $(PROG) $(PROG).o

$(LIBCRAPS): $(LIBOBJS)
    $(CC) -shared -o lib$(LIBCRAPS).so $(LIBOBJS)

$(LIBOBJS): $(LIBSRCS)
    $(CC) $(CXXFLAGS) $(CFLAGS) $(LIBSRCS) $(PROG).cpp

.PHONY: clean
clean:
    rm -f *.o *.so $(PROG)
%.o:%.cpp
$(CC)$(cxflags)-c-o$@$<

谢谢,但是为什么这一行在生成可执行文件之后不执行呢<代码>$(CC)$(LDFLAGS)-l$(LIBCRAPS)-o$(PROG)$(PROG).o
%.o : %.cpp
    $(CC) $(CXXFLAGS) -c -o $@ $<