Вы неправильно поняли мой комментарий.Я говорю это так:
PROG=craps LIBSRCS=craps.cpp craps_game.cpp craps_helper.cpp craps_io.cpp
неправильно.Вы не можете назначить две переменные в одной строке в make-файле.Эти переменные должны выглядеть следующим образом:
PROG=craps
LIBSRCS=craps.cpp craps_game.cpp craps_helper.cpp craps_io.cpp
Я спрашиваю, выглядит ли последний как ваш фактический make-файл, или приведенный здесь пример просто неточный.
Также эти правила обаневерные символы новой строки:
$(PROG):
$(LIBSRCS) $(CC) $(LDFLAGS) -l$(PROG) -o $(PROG) $(PROG).o
$(LIBCRAPS):
$(LIBOBJS) $(CC) -shared -o lib$(LIBCRAPS).so $(LIBOBJS)
Вы добавляете списки необходимых компонентов $(LIBSRCS)
и $(LIBOBJS)
в рецепт (команды оболочки), используемый для построения цели.Предпосылки должны быть на одной линии с целью.Они должны выглядеть следующим образом:
$(PROG): $(LIBSRCS)
$(CC) $(LDFLAGS) -l$(PROG) -o $(PROG) $(PROG).o
$(LIBCRAPS): $(LIBOBJS)
$(CC) -shared -o lib$(LIBCRAPS).so $(LIBOBJS)
Это ваша проблема, ниже
Наконец, вы не можете иметь и программу, и цель с одинаковым именем:
PROG=craps
LIBCRAPS=craps
Вы можете создать только одну цель с заданным именем, поэтому значение обеих этих переменных не может быть craps
.Возможно, вы хотели:
PROG = craps
LIBCRAPS = libcraps.so
Предполагая, что указанный вами make-файл идентичен тому, что вы используете, вы должны получать предупреждения, подобные этому, от make
при запуске этого make-файла:
Makefile:15: warning: overriding recipe for target 'craps'
Makefile:12: warning: ignoring old recipe for target 'craps'
Эти предупреждения объясняют, почему вы не видите вызванное правило компиляции: правило библиотеки переопределяет его так же, как в предупреждении.
Кроме того, вы должны иметь программу, зависящую от библиотеки (так какон связывает его) и объектный файл $(PROG).o
, потому что в настоящее время make не знает, что его нужно собрать.И вам не нужно, чтобы это зависело от всех исходных файлов.Вы хотите что-то вроде:
$(PROG): $(LIBCRAPS) $(PROG).o
$(CC) $(LDFLAGS) -l$(PROG) -o $(PROG) $(PROG).o