我有两个*.c
和a.c
两个func_a.c
文件,而Makefile
看起来像这样:
CC = gcc
CFLAGS = -Wpedantic -Wall -Wextra -std=c11
LIBS = -pthread
A = src/a.c
FUNC_A = src/func_a.c
A_OBJ = object/a.o
FUNC_A_O = object/func_a.o
BINARY_A = bin/a
all: $(BINARY_A)
$(BINARY_A): $(A_OBJ) $(FUNC_A_O)
$(CC) -o $(BINARY_A) $(A_OBJ) $(FUNC_A_O) $(CFLAGS) $(LIBS)
$(A_OBJ): $(A)
$(CC) -c $(A) -o $(A_OBJ)
$(FUNC_A_O): $(FUNC_A)
$(CC) -c $(FUNC_A) -o $(FUNC_A_O)
使用此Makefile
,我编译那些C
文件,并将它们发送到所需的目录。
bin/binary files
obj/object files
现在为b.c
和func.b.c
做以下事情:
CC = gcc
CFLAGS = -Wpedantic -Wall -Wextra -std=c11
LIBS = -pthread
A = src/a.c
FUNC_A = src/func_a.c
A_OBJ = object/a.o
FUNC_A_O = object/func_a.o
B = src/b.c
FUNC_B = src/func_b.c
b_OBJ = object/b.o
FUNC_B_O = object/func_b.o
BINARY_A = bin/a
BINARY_B = bin/b
all: $(BINARY_A) $(BINARY_B)
$(BINARY_A): $(A_OBJ) $(FUNC_A_O)
$(CC) -o $(BINARY_A) $(A_OBJ) $(FUNC_A_O) $(CFLAGS) $(LIBS)
$(BINARY_B): $(B_OBJ) $(FUNC_B_O)
$(CC) -o $(BINARY_B) $(B_OBJ) $(FUNC_B_O) $(CFLAGS) $(LIBS)
$(A_OBJ): $(A)
$(CC) -c $(A) -o $(A_OBJ)
$(B_OBJ): $(B)
$(CC) -c $(B) -o $(B_OBJ)
$(FUNC_A_O): $(FUNC_A)
$(CC) -c $(FUNC_A) -o $(FUNC_A_O)
$(FUNC_B_O): $(FUNC_B)
$(CC) -c $(FUNC_B) -o $(FUNC_B_O)
.PHONY: clean
clean:
rm -f $(BINARY_A)
rm -f $(A_OBJ)
rm -f $(FUNC_A_O)
rm -f $(BINARY_B)
rm -f $(B_OBJ)
rm -f $(FUNC_B_O)
这是问题所在,make文件太大,如果我有更多*.c
个文件,它将更大。
如何修改此代码,以便我可以编译所有这些*.c
文件并将其发送到所需的目录?