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

时间:2018-11-22 03:21:05

标签: makefile g++

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)

为什么我遇到该错误,并且patsubst没有显示编译的权限输出,真的很困惑

1 个答案:

答案 0 :(得分:1)

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

此外,$(LIBOBJS)目标不正确,您在那里需要一个模式规则。您拥有的规则将要求单个编译器调用来构建所有对象。但是实际上您需要为每个对象调用一次编译器。

代替$(LIBOBJS): $(LIBSRCS)等,可能是:

%.o : %.cpp
    $(CC) $(CXXFLAGS) -c -o $@ $<