如何在 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>
我的代码应该分为客户端、服务器和头文件。这是所有内容都在一个文件中的生成文件 -
# 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>