如何在 Gtk 中使用 makefile

How to use a makefile with Gtk

我的代码应该分为客户端、服务器和头文件。这是所有内容都在一个文件中的生成文件 -

# change application name here (executable output name)
TARGET=BugTrack

# compiler
CC=gcc
# debug
DEBUG=-g
# optimisation
OPT=-O0
# warnings
WARN=-Wall

PTHREAD=-pthread

CCFLAGS=$(DEBUG) $(OPT) $(WARN) $(PTHREAD) -pipe

GTKLIB=`pkg-config --cflags --libs gtk+-3.0`

# linker
LD=gcc
LDFLAGS=$(PTHREAD) $(GTKLIB) -export-dynamic

OBJS= client.o 

all: $(OBJS)
    $(LD) -o $(TARGET) $(OBJS) $(LDFLAGS)

client.o: client.c
    $(CC) -c $(CCFLAGS) client.c  $(GTKLIB) -o client.o

clean:
    rm -f *.o $(TARGET)

这行得通。但是将最后一部分更改为此 -

OBJS= client.o server.o

all: $(OBJS)
    $(LD) -o $(TARGET) $(OBJS) $(LDFLAGS)

client.o: client.c
    $(CC) -c $(CCFLAGS) client.c header.h $(GTKLIB) -o client.o

server.o: server.c
    $(CC) -c $(CCFLAGS) server.c header.h $(GTKLIB) -o server.o

clean:
    rm -f *.o $(TARGET)

给我一个错误 fatal error: cannot specify -o with -c, -S or -E with multiple files。 我该如何解决?

您不需要将 header 文件放入您的编译行中,所以只需执行以下操作:

OBJS= client.o server.o

all: $(OBJS)
    $(LD) -o $(TARGET) $(OBJS) $(LDFLAGS)

client.o: client.c
    $(CC) -c $(CCFLAGS) client.c $(GTKLIB) -o client.o

server.o: server.c
    $(CC) -c $(CCFLAGS) server.c $(GTKLIB) -o server.o

clean:
    rm -f *.o $(TARGET)

如果您需要添加 header 包含路径,那么您可以添加 -I<path>