C 如何将makefile与Gtk一起使用

C 如何将makefile与Gtk一起使用,c,gcc,makefile,gtk,client-server,C,Gcc,Makefile,Gtk,Client Server,我的代码应该分为客户端、服务器和头文件。这是一个makefile,当它全部位于一个文件中时- # 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)

我的代码应该分为客户端、服务器和头文件。这是一个makefile,当它全部位于一个文件中时-

# 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)
给我一个错误,上面写着
致命错误:无法使用多个文件指定-o和-c、-S或-E

如何修复它?

您不需要将头文件放入编译行,因此只需执行以下操作:

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)

如果您需要添加头包含路径,那么您可以添加
-I

,这将有助于您只需要为每个规则编译一个源文件,但您可以指定多个文件。您正在将
server.c
header.h
输入编译器。头本身不是编译单元。当编译包含头文件的源文件时,它们被隐式编译。不要将它们添加到编译器的命令行中。相反,您应该将头添加到定义.o文件依赖性的上面一行。