我的代码应该分为客户端、服务器和头文件。这是所有文件都在一个文件中时的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)
给我一个错误,说 fatal error: cannot specify -o with -c, -S or -E with multiple files
.我怎么解决?
你不需要把头文件放到你的编译行中,所以只需要这样做。
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<path>