g ++ не может указывать -c и -o для нескольких файлов - PullRequest
0 голосов
/ 22 ноября 2018
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 голосов
/ 22 ноября 2018

-c и -o не должны быть в CFLAGS.Вместо этого они должны появляться непосредственно в командной строке компилятора, где это уместно.

Кроме того, цель $(LIBOBJS) неверна, вам необходимо правило шаблона.Правило, которое вы имеете, будет ожидать, что один вызов компилятора создаст все объекты;но на самом деле вам нужно вызывать компилятор один раз для каждого объекта.

Вместо $(LIBOBJS): $(LIBSRCS) и т. Д. Это может быть:

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