使用-Wall -pedantic和-lpthread的gcc makefile

时间:2015-12-05 21:33:50

标签: c gcc makefile gcc-pedantic

我试图从模板制作一个makefile,这就是我所拥有的:

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

这是我的makefile在-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 个答案:

答案 0 :(得分:1)

  • -c将只编译每个文件(即生成一个目标文件),而不是将它们链接在一起。由于一个目标文件对应一个源文件,因此将创建多个目标文件

  • -o指定一个输出文件。

显然,两者都相互矛盾。

删除-c以解决问题。

无论如何,你的makefile看起来很糟糕。 ex2做了什么? <{1}}和bank5.o无处创建。