我正在尝试更改我的makefile以将.o重定向到lib文件夹(并将.c放在src文件夹中)。我还希望可执行文件与makefile处于同一级别。
至于.h,我不知道该把它放在哪里!
CC = gcc
CFLAGS = -std=c11 -Wpedantic -Wall -Wextra -Wconversion -Werror -fPIC -pthread -D_XOPEN_SOURCE=500 -fstack-protector
LDLIBS = -lrt
RM = rm -f
ARFLAGS = rs
all: server client info_proc info_user
server: server.o header.o
$(CC) $(CFLAGS) -o $@ $^ $(LDLIBS)
server.o: server.c header.h
gcc -c server.c
client: client.o header.o
$(CC) $(CFLAGS) -o $@ $^ $(LDLIBS)
client.o: client.c header.h
header.o: header.c header.h
gcc -c header.c
info_proc: info_proc.o
info_proc.o: info_proc.c
gcc -c info_proc.c
info_user: info_user.o
info_user.o: info_user.c
gcc -c info_user.c
rmpipe:
$(RM) question_pipe
clean:
$(RM) server client info_proc info_user question_pipe *.o *~$
答案 0 :(得分:0)
你可以这样做:
all: main
main: lib/a.o lib/b.o lib/main.o
$(CC) $(CFLAGS) -o $@ $^
lib/a.o: a.c
$(CC) $(CFLAGS) -c -o $@ $<
lib/b.o: b.c
$(CC) $(CFLAGS) -c -o $@ $<
lib/main.o: main.c
$(CC) $(CFLAGS) -c -o $@ $<
或者您可以使用其中一个版本来代替编写自己的Makefile
工具:
比自编更容易维护
Makefile
。