我正在尝试为我在 Linux 下用 C 编写的小型应用程序编写一个 makefile。目前我所有的源文件.c
都在顶级目录中,所有头文件都在包含目录中。这是我用于此的makefile。
IDIR =include
CC=gcc
CFLAGS=-I$(IDIR)
ODIR=obj
_OBJ = main.o kernel.o user_app.o myargs.o ofp_msgs.o pkt_ip.o pkt_ether.o pkt_tcp.o pkt_udp.o pkt_icmp.o
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))
#DEPS = ofp_msgs.h
$(ODIR)/%.o: %.c
$(CC) -c -o $@ $< $(CFLAGS)
all: jam
jam: $(OBJ)
gcc -o $@ $^ $(CFLAGS) -lpthread
.PHONY: clean
clean:
rm -f $(ODIR)/*.o *~ jam
它工作正常,但我想要的是,例如,我创建了一个名为的子目录"Packet"
,并且我的所有数据包解析文件"pkt_ip.c, pkt_tcp.c etc"
都应该在那个目录中,因为它们的头文件应该仍然在顶级目录中"toplevel/include"
。我做了一些搜索,最常见的方法是使用递归制作。然后我看到很多页面抱怨递归生成。任何人都可以帮我解决这个问题吗?谢谢