make-файл gcc с -Wall -pedantic и -lpthread

Я попытался сделать make-файл из шаблона, и вот что я получил:

CFLAGS = -Wall -pedantic
LFLAGS = -lpthread
CC = gcc
OBJS = bank5.o client2.o
PROGRAM = ex2

all: bank client

ex2: $(OBJS)
    $(CC) $(LFLAGS) $(OBJS) -o $(PROGRAM)

bank: bank5.c
    $(CC) $(CFLAGS) -c bank5.c receive_message.c send_message.c -o bank5

client: client2.c
    $(CC) $(CFLAGS) -c client2.c receive_message.c send_message.c -o client2

Когда я пытаюсь запустить его, я получаю эту ошибку:

gcc -Wall -pedantic -c bank5.c receive_message.c send_message.c -o bank5
gcc: fatal error: cannot specify -o with -c, -S or -E with multiple files
compilation terminated.
make: *** [bank] Error 4

Вот как выглядел мой make-файл до -Wall и -Pedantic, он работал нормально:

all: bank client

bank: bank5.c
    gcc bank5.c receive_message.c send_message.c -o bank5 -lpthread

client: client2.c
    gcc -o client2 client2.c send_message.c receive_message.c

1 ответ

Решение
  • -c просто скомпилирует каждый файл (т.е. создаст объектный файл), а не свяжет их вместе. Поскольку один объектный файл соответствует одному исходному файлу, будет создано несколько объектных файлов.

  • -o указывает один выходной файл.

Очевидно, что оба противоречат друг другу.

Удалить -c решить проблему.


В любом случае, ваш make-файл выглядит испорченным. Что значит ex2 делать там? bank5.o а также client2.o нигде не созданы.

Другие вопросы по тегам